Problem Description
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Sample Input
7 2 23 12 -4 3
Sample Output
111 1B -11
这道题其实与二进制转化思路完全相同其中需要在二进制转化的代码上进行两处改变:
1.大于10的余数需要用字母表示
2.负数要转化为正数再进行计算,(开始的时候判断该数的正负,用flag做标记,以便于最后输出负号)。
代码如下:
- #include<iostream>
- using namespace std;
- int main()
- {
- int n,a[5000],i,t,m;
- while(cin>>n>>m)
- {
- int flag=0;
- if(n<=0)
- {
- n=-n;
- flag=1;
- }
- for(i=0;;i++)
- {
- a[i]=n%m;
- n/=m;
- if(n==0)
- {
- if(flag)
- cout<<'-';
- t=i;
- for(i=t;i>=0;i--)
- {
- // if(flag)
- // cout<<'-';
- if(a[i]==10)
- cout<<'A';
- else if(a[i]==11)
- cout<<'B';
- else if(a[i]==12)
- cout<<'C';
- else if(a[i]==13)
- cout<<'D';
- else if(a[i]==14)
- cout<<'E';
- else if(a[i]==15)
- cout<<'F';
- else
- cout<<a[i];
- }
- cout<<endl;
- break;
- }
- }
- }
- return 0;
- }