1173: 进制转换
时间限制: 1 Sec 内存限制: 64 MB提交: 112 解决: 37
[ 提交][ 状态][ 讨论版]
题目描述
编一程序实现两种不同进制之间的数据转换。
输入
输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2 ≤ n ≤ 16),第二行是一个n进制数,若n > 10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2 ≤ m ≤ 16)。
输出
输出仅一行,包含一个正整数,表示转换之后的m进制数。
样例输入
16FF2
样例输出
11111111
#include <iostream>
using namespace std;
const int t=20000000;
char a[t],b[t];
int fun(char c)
{
int k;
if (c>='1'&&c<='9')
{
k=c-'0';
return k;
}
k=c-55;
return k;
}
int fun1(char x)
{
int k;
if (x>=0&&x<=9)
{
k=x+'0';
return k;
}
k=x+55;
return k;
}
int main()
{
int n,m,i,j,sum=0;
cin >> n;
cin.get();
cin.getline(a,t);
cin >> m;
for (i=0;a[i]!='\0';i++)
{
if (a[i]=='0')
{
sum*=n;
}
else
{
sum=sum*n+fun(a[i]);
}
}
j=0;
while (sum!=0)
{
b[j]=fun1(sum%m);
sum=sum/m;
j++;
}
for (i=j-1;i>=0;i--)
{
cout << b[i];
}
cout << endl;
return 0;
}