HDU_oj_2031 进制转换
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
分析:
进制转换用到的就是不断除以要转换的进制数,然后把得到的各个余数逆序排列
有这个关系式:M=a1xn-1+a2xn--2+a3xn-3......+anx0
其中 M为给出的10进制数,n为进制转换后的位数,a1,a2,a3...an则为第n位上的具体数据
将这个过程逆推即可
注意点:输出时由于不会超过16进制,所以直接 “%x”输出即可
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int n,m,r,v; 7 int c[35]; 8 while(cin>>m>>r) 9 { 10 int i=1; 11 n=(m>0?m:-m); 12 while(n) 13 { 14 int v=n%r; 15 n/=r; 16 c[i++]=v; 17 } 18 if(m<0) 19 cout<<"-"; 20 while(--i) 21 printf("%X",c[i]); 22 cout<<endl; 23 } 24 }