《零基础学算法》(第二讲)进制转换
💟作者简介:大家好,我是锡兰Ceylan_,可以叫我CC ❣️
📝个人主页:锡兰Ceylan_的博客
🏆博主信息:平凡的大一学生,有着不平凡的梦专栏
- 【备战蓝桥,冲击省一】
- 【开卷数据结构】
⚡希望大家多多支持😘一起进步~❤️
🌈若有帮助,还请【关注➕点赞➕收藏】,不行的话我再努努力💪
🌺其他进制转换成十进制
🍁实现思路
🔺实现原理
从最低位开始,把每一位上的数提取出来,乘上进制数,然后求和。
🔺算法分析
1️⃣从最低位开始一位一位进行判断,有两种情况,第一种为数字,第二种为字母
2️⃣为数字时,答案等于前一次判断的答案 * 进制加上这一位的数字
3️⃣为字母时,答案等于前一次判断的答案 * 进制加上这一位的字母减去'A'加10
🍁二进制转换成十进制
🔺图解原理
💬 代码演示
int main() {string s;cin>>s; //二进制数int ans=0;for(int i=0;i<s.size();i++){ char t=s[i]; ans=ans*2+t-'0';}cout<< ans;}
🍁八进制转换成十进制
💬 代码演示
int main() {string s;cin>>s; //8进制数int ans=0;for(int i=0;i<s.size();i++){char t=s[i];ans=ans*8+t-'0';}cout<< ans;}
🍁十六进制转换成十进制
💬 代码演示
int main() {string s;cin>>s; //16进制数int ans=0;for(int i=0;i
='0'&&t<='9') ans=ans*16+t-'0';else ans=ans*16+t-'a'+10;}cout<< ans;}
🍁任意进制转换成十进制
相信大家看了之前的例子,应该发现其他进制转换成十进制的规律了吧!我们可以统一一下,写出任意进制转换十进制的函数
💬 代码演示
int main() {string s;cin>>s; //任意进制数 int num; cin>>num; //进制数int ans=0;for(int i=0;i
='0'&&t<='9') ans=ans*num+t-'0';else ans=ans*num+t-'a'+10;}cout<< ans;}
🌺十进制转换成其他进制
🍁实现思路
🔺实现原理
将该数不断除以该进制,直到商为0停止,最后将每步得到的数倒过来,就是答案了
🔺算法分析
1️⃣将该数除以该进制,得到的商有两种情况,第一种情况为0-9,第二种情况为 >9
2️⃣商是 0-9 时,直接记录,进行下一次相除
3️⃣商 >9 时,更改为字母形式,进行下一次相除
4️⃣商为 0 时,停止操作,翻转结果,得到答案
🍁十进制转换成二进制
🔺图解原理
这里有一个十进制数【30】,要求转换成二进制数。
第一步:30除以2,得到商0,数变成15
第二步:15除以2,得到商1,数变成7
第三步:7除以2,得到商1,数变成3
第四步:3除以2,得到商1,数变成1
第五步:1除以2,得到商1,数变成0
最后一步:停止操作,将得到的商翻转,得到【30】的二进制数【11110】
💬 代码演示
int main() {int n;cin>>n;//十进制数 string ans="";do{int t=n%2;ans+=t+'0';n/=2;}while(n!=0);reverse(ans.begin(),ans.end());cout<< ans;}
🍁十进制转换成八进制
💬 代码演示
int main() {int n;cin>>n;//十进制数 string ans="";do{int t=n%8;ans+=t+'0';n/=8;}while(n!=0);reverse(ans.begin(),ans.end());cout<< ans;}
🍁十进制转换成十六进制
💬 代码演示
int main() {int n;cin>>n;//十进制数 string ans="";do{int t=n%16;if(t>=0&&t<=9)ans+=t+'0';else ans+=t-10+'a';n/=16;}while(n!=0);reverse(ans.begin(),ans.end());cout<< ans;}
🍁十进制转换成任意进制
相信大家看了之前的例子,应该发现十进制转换成任意进制的规律了吧!我们可以统一一下,写出十进制转换任意进制的函数
💬 代码演示
int main() {int n;cin>>n;//任意进制数 int num; cin>>num;//进制数string ans="";do{int t=n%num;if(t>=0&&t<=9)ans+=t+'0';else ans+=t-10+'a';n/=num;}while(n!=0);reverse(ans.begin(),ans.end());cout<< ans;}
🌺任意进制转换成任意进制
如果大家明白了上边的题目,可以动脑想一想,随机给定一个任意进制数 num1 ,要求转换成另一个任意进制数 num2 ,应该怎么实现呢?
🔺实现原理
我们可以先把 num1 转换成十进制数字,再把十进制数字转换成 num2
💬 代码演示
int main() {string s;cin>>s; //任意进制数 int num1; cin>>num1; //进制数int num=0; for(int i=0;i
='0'&&t>num2; //进制数string ans=""; //最终答案do //将十进制数num转换成num2进制数字 {int t=num%num2;if(t>=0&&t<=9)ans+=t+'0';else ans+=t-10+'a';num/=num2;}while(num!=0);reverse(ans.begin(),ans.end());cout<< ans;}
本人不才,如有错误,欢迎各位大佬在评论区指正。有帮助的话还请【关注➕点赞➕收藏】,不行的话我再努努力💪💪💪