您的位置:首页 > 其它

任意的进制转换

2014-05-08 14:56 162 查看
进制转换我们经常遇到。

遇到这么好模板就抓紧写一下记住吧,虽然不难。

以后博客都来写个思路吧,记录点滴。

进制转换。

1,我们来输入要转换的数字,和这个数字的进制,还有将要转换的进制。

2,因为是任意进制的,我们就同一的转化为10进制的,然后从10进制再转化为我们想要的进制。

2.1 就是转化为10进制的时候:我们先来处理输入的数字(因为是字符类型的,转化为直接能操作的数字,这里是用了阿斯科码与int相应转换,这是c语言基础知识),然后我们将其用转化为10进制 sum 从头开始 挨个来, 别忘了*进制;

2.2就是将这个10进制的数转换为我们想要的进制数了,就是每次除进制取余用数组来存放,直到取到被除数为0 为止。注意在数组中我们存放的顺序是反的,我们需要将数组来倒置。这样我们的想要的结果就出来了。

(注意因为进制16等这些大的进制,所以会出现ABC等这些字母,我们在输入输出转换的时候都要考虑到,需要处理的)

下面贴出代码:

#include<iostream>
using namespace std;
//进制处理任一进制的转换
void convirsion( char *a ,char* b,int x,int y )
{
__int64 sum=0 ;
for(int i=0;i<a[i]!='\0';i++)
{
if(a[i]>='0'&&a[i]<='9')
sum = sum*x+(a[i]-'0');
else
sum=sum*x+(a[i]-'A'+10);
}
int k=0;
while(sum)
{
int t = sum%y;
if(t>9)
b[k++]=t-10+'A';
else
b[k++]=t+'0';
sum/=y;
}
for(int i=0;i<k/2;i++)
{
int t = b[i];
b[i]=b[k-1-i];
b[k-1-i] = t;
}
for(int i=0;i<k;i++)
{
cout<<b[i];
}
cout<<endl;
}
int main()
{
char a[50],b[50];
int x,y;
while(1)
{
cin>>a>>x>>y;
convirsion(a,b,x,y);
}
}


好了。

感谢自己坚持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: