题目:
输入一个十进制数N,将它转换成R进制数输出。在10<=R<=16的情况下,用‘A’表示10,用‘B’表示11,用‘C’表示12,用‘D’表示13,用‘E’表示14,用‘F’表示15。
输入格式
输入包含两个整数N(N<=10000)和R(2<=R<=16)
注意:N有可能是负整数。
输出格式
输出一行
输入样例
23 12
输出样例
1B
- 分析思路:
十进制->R进制
用十进制对R进制求余数,求得的余数再除以R,保留对R取余的结果,再除以R…,这样就求得从低位往高位一个一个的R进制位是多少
i=N%R
对于负整数先输出一个负号,在输出N,这样就变成了一个负数(这样就保持和正数一样了)
例如:十进制取每一位,把对10取余的结果保留,再整体除以10
样例中要求将23转换成12进制
- 代码:
#include <iostream>
#include<cstdio>
#include <algorithm>
using namespace std;
char ans[110]; //保留A,B,C,D,E
int main(){
int N,R,m,i; //m:余数每次取一位放入数组中,i指:当前的数,取余的数
cin>>N>>R;
if(N<0){
cout<<"-";
N=-N;
}
m=0;//m从0开始计数
while(N){
i=N%R;
//先保存再输出 ,要倒序输出
if(i<=9){ //小于9
ans[m++]='0'+i;
}
else{
ans[m++]='A'+i-10; //10=A+0,11=A+1...
}
N/=R;
}
if(m==0){
cout<<0<<endl;
}
//上面输出的结果是反的,要倒序输出
for(int j=m-1;j>=0;j--){
cout<<ans[j];
}
cout<<endl;
return 0;
}