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

目录

其他进制转换成十进制

实现思路

实现原理

算法分析

二进制转换成十进制

图解原理

代码演示

八进制转换成十进制

代码演示

十六进制转换成十进制

代码演示

任意进制转换成十进制 

代码演示

十进制转换成其他进制

实现思路

实现原理

算法分析

十进制转换成二进制

图解原理

代码演示

十进制转换成八进制

代码演示

十进制转换成十六进制

代码演示

十进制转换成任意进制 

代码演示

任意进制转换成任意进制

实现原理

代码演示

94536690f848438fab30aa17191a6ea2.png

其他进制转换成十进制

实现思路


实现原理

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

算法分析

1️⃣从最低位开始一位一位进行判断,有两种情况,第一种为数字,第二种为字母

2️⃣为数字时,答案等于前一次判断的答案 * 进制加上这一位的数字

3️⃣为字母时,答案等于前一次判断的答案 * 进制加上这一位的字母减去'A'加10


二进制转换成十进制


图解原理

代码演示

int main()    
{
	string s;
	cin>>s;           //二进制数
	int ans=0;
	for(int i=0;i

八进制转换成十进制


代码演示

int main()    
{
	string s;
	cin>>s;        //8进制数
	int ans=0;
	for(int i=0;i

十六进制转换成十进制


代码演示

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

 

你可能感兴趣的:(《零基础算法小课堂》,算法,数据结构,c++,c语言)