> 文档中心 > 《零基础学算法》(第二讲)进制转换

《零基础学算法》(第二讲)进制转换


💟作者简介:大家好,我是锡兰Ceylan_,可以叫我CC ❣️    
📝个人主页:锡兰Ceylan_的博客
🏆博主信息:平凡的大一学生,有着不平凡的梦

        专栏

  • 【备战蓝桥,冲击省一】
  • 【开卷数据结构】

⚡希望大家多多支持😘一起进步~❤️
🌈若有帮助,还请关注点赞收藏,不行的话我再努努力💪​

94536690f848438fab30aa17191a6ea2.png

🌺其他进制转换成十进制

🍁实现思路


🔺实现原理

从最低位开始,把每一位上的数提取出来,乘上进制数,然后求和。

🔺算法分析

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;}

94536690f848438fab30aa17191a6ea2.png

本人不才,如有错误,欢迎各位大佬在评论区指正。有帮助的话还请【关注点赞收藏】,不行的话我再努努力💪💪💪