随意进制之间的转换
任意进制之间的转换文章包括:任意进制转任意进制的分析及代码(c/c)任意进制的转任意进制是通过十进制这个
任意进制之间的转换
文章包括:任意进制转任意进制的分析及代码(c/c++)
任意进制的转任意进制是通过十进制这个平台来实现即先转换为十进制,然后就转换成其他进制
当然像类似2进制八进制,十六进制可直接转
#include<cstdio>
#include<iostream>
#include<cassert>
using namespace std;
一、n进制转十进制
Nnum为输入的任意进制,n为要转的进制
long NToDecimal(char *Nnum, int n)
{
int flag = 1;
if((Nnum==NULL)||(n == 0))
{
cout<<"input error"<<endl;
exit(-1);
}
long sum = 0;
while(*Nnum != '\0')
{
if((*Nnum>='a')&&(*Nnum<='z'))
{
sum += (*Nnum - 'a' + 10) * flag;
flag *= n;
}
else if((*Nnum>='A')&&(*Nnum<='Z'))
{
sum += (*Nnum - 'A' + 10) * flag;
flag *= n;
}
else if((*Nnum >= '0')&&(*Nnum <= '9'))
{
sum += (*Nnum - '0') * flag;
flag *= n;
}
else
cout<<"输入有误"<<endl;
Nnum++;
}
return sum;
}
//十进制到N进制,n为整数,r为进制数,Narr保存返回N进制
void DecimalToN(int n, int r, char *Narr)
{
int flag = 1;
char temp[40];
int i = 0;
int j = 0;
int res;
assert((n>=0)&&(r>=2)&&(Narr));
while(n)//求余
{
res = n % r ;
if(res<=9)
temp[i++] = res + '0';
else if(res>=10)
temp[i++] = res -10 + 'A';
n /= r;
}
while(i--)//逆序
{
Narr[j++] = temp[i];
}
Narr[j] = '\0';
}
int main()
{
/*
cout<<"输入任意进制"<<endl;
char Nnum[20];
cin>>Nnum;
long Dnum;
int n;
cout<<"输入进制数"<<endl;
cin>>n;
Dnum = NToDecimal(Nnum, n);
cout<<Dnum<<endl;
*/
int n1;
cout<<"输入一个十进制整数"<<endl;
cin>>n1;
char Narr[40];
cout<<"输入要转换的进制数"<<endl;
int r;
cin>>r;
DecimalToN(n1 ,r, Narr);
cout<<Narr<<endl;
return 0;
}