进制转换
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:142 测试通过:59
描述
请你编一程序实现两种不同进制之间的数据转换。
输入
输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
输出
输出仅一行,包含一个正整数,表示转换之后的m进制数。
样例输入
16
FF
2
样例输出
11111111
题目来源
NUAA
分析:我的思路先转成10进制的,再转换成k进制的输出。中间出现小问题,没考虑输出是10进制以上的情况。
#include<stdio.h>
#include <string>
#include <stack>
using namespace std;
int main()
{
int n=0,m,i,j,k;
char ch[1000],map[]="0123456789ABCDEF";
stack<int>s;
while(scanf("%d%s%d",&m,ch,&k)!=EOF){
n=0;
for(i=0;i<strlen(ch);i++)
{
if (ch[i]>64)
{
n=n*m+ch[i]-55;
}
else
{
n=n*m+ch[i]-48;
}
}
do
{
s.push(n%k);
n/=k;
}
while (n);
while (!s.empty())
{
printf("%c",map[s.top()]);
s.pop();
}
printf("\n");
}
}