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

本文详细介绍了二进制、八进制、十六进制以及其他任意进制与十进制之间的转换方法,包括从低到高的计算原理、算法分析和代码演示。通过示例代码展示了如何将任意进制数转换为十进制,以及如何将十进制转换为任意进制,帮助读者理解并实现不同进制间的转换操作。

目录

🌺其他进制转换成十进制

🍁实现思路

🔺实现原理

🔺算法分析

🍁二进制转换成十进制

🔺图解原理

💬 代码演示

🍁八进制转换成十进制

💬 代码演示

🍁十六进制转换成十进制

💬 代码演示

🍁任意进制转换成十进制 

💬 代码演示

🌺十进制转换成其他进制

🍁实现思路

🔺实现原理

🔺算法分析

🍁十进制转换成二进制

🔺图解原理

💬 代码演示

🍁十进制转换成八进制

💬 代码演示

🍁十进制转换成十六进制

💬 代码演示

🍁十进制转换成任意进制 

💬 代码演示

🌺任意进制转换成任意进制

🔺实现原理

💬 代码演示

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<s.size();i++)
	{
		char t=s[i];
		if(t>='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<s.size();i++)
	{
		char t=s[i];
		if(t>='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<s.size();i++)    //将num1进制数字s1转换成十进制数 num
	{
		char t=s[i];
		if(t>='0'&&t<='9') num=num*num1+t-'0';
		else num=num*num1+t-'a'+10;
	}

    int num2;
    cin>>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;	
}

评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锡兰_CC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值