【题意】
把十六进制以下的m进制转换为n进制;
1、第一个数是初始值,第二个数是初始进制,第三个数是要求转化的进制。
2、输出必须小于等于七位。否则输出ERROR。
3、把初始值转化为十进制数。原理:每位数字*初始进制^(位序-1)。
4、把十进制数转化为要求的进制数。原理:除N取余法
#include<iostream>
#include<string.h>
#include<cmath>
typedef long long LL;
using namespace std;
int main()
{
char c[20];
long int i,j,n,k,a,b,y;
while(cin>>c>>a>>b)
{
char s[20];
k=0;
n=strlen(c);
for(i=0;i<=n;++i) //先转换成十进制
{
if(c[i]>='0'&&c[i]<='9')
{
y=c[i]-48; //相当于 y=c[i]-'0'
}
else
{
switch(c[i])
{
case 'A':y=10;break;
case 'B':y=11;break;
case 'C':y=12;break;
case 'D':y=13;break;
case 'E':y=14;break;
case 'F':y=15;break;
}
}
k+=(y*(LL)pow(a,n-i-1));
}
if(k==0)
{
cout<<" 0"<<endl;
continue;
}
i=0;
while(k) //再转换成 b进制
{
y=k%b;
if(y>=0&&y<=9)
{
s[i]=y+48; //相当于 y=c[i]+'0'
}
else
{
switch(y)
{
case 10:s[i]='A';break;
case 11:s[i]='B';break;
case 12:s[i]='C';break;
case 13:s[i]='D';break;
case 14:s[i]='E';break;
case 15:s[i]='F';break;
}
}
k=k/b;
i++;
}
if(i>7)
{
cout<<" ERROR";
}
else
{
for(j=0;j<7-i;j++)
{
cout<<" ";
}
i--;
for(;i>=0;i--)
{
cout<<s[i];
}
}
cout<<endl;
}
return 0;
}