题目描述
Problem
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Sample Input
2 7
23 12
-4 3
Sample Output
111
1B
-11
Ps:解题思路
对于小于等于10的进制转换直接用数组记录它的每一位即可用循环让N对R取余
对于大于10的进制转换同样的方法只是如果取余的结果小于10就令它加上48(0的ascll值)如果大于等于10就按照16进制的方法加上55(A的ascll值-10)
小编比较菜只能采用·这样的笨方法了
上代码
#include<iostream>
#include<cstdio>
int main()
{
int N,R;
int chang[1000],i,j;
while(~scanf("%d%d",&N,&R))
{
int flag=0;
if(N<0){
flag=1;
N*=-1;
}
if(R<=10)
{
i=0;
while(N)
{
chang[i++]=N%R;
N/=R;
}
if(flag) printf("-");
for(--i;i>=0;i--)
{
printf("%d",chang[i]);
}
}
else
{
i=0;
int b;
int num[1000];
while(N)
{
b=N%R;
if(b<10) num[i++]=b+48;
else num[i++]=b+55;
N/=R;
}
if(flag) printf("-");
for(--i;i>=0;i--)
{
printf("%c",num[i]);
}
}
printf("\n");
}
}