版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ftx456789/article/details/85932571
不同进制的转换都可以通过转换为10进制再由10进制转为其他进制的方法来实现,首先我们先看看不同的进制转为10进制如何操作
举一个16进制转为10进制的例子,首先有数
,将他转为10进制我们可以先把
分解来看
也就是说
乘以
了
次,
乘以
了
次,
乘以
了
次,
乘以
了
次。
根据乘法的分配律,上述式子我们可以化为
所以可以在该数的长度的复杂下完成进制转换
char a[]="1F3E";
int len=strlen(a);
int sum=0;
for(int i=0;i<len;i++)
{
sum=sum*16;
if(a[i]<='9'&&a[i]>='0')
sum+=a[i]-'0';
else
sum+=a[i]-'A'+10;
}
那么10进制如何转化为其他进制下的数呢
同样的我们拿一个数举例子如:
我们用的是余数法,对于一个10进制数我们对其不断的做除法,每次所留下的余数就是就是要转化的数的低位
所以从下往上看我们就可以得到我们要的16进制数
已知一个10进制数我们可以用栈来存我们每次的到的余数,最后再一次弹栈就是10进制要转化为其他的进制数了
stack<int> s;
int num=7998;
while(num)
{
s.push(num%16);
num/=16;
}
while(!s.empty())
{
if(s.top()<10)
printf("%d",s.top());
else
printf("%c",s.top()-10+'A');
s.pop();
}
不同进制的转换都可以用10进制为媒介然后先转换为10进制再从10进制转为其他进制