(HDOJ 2031)進数変換
10064 ワード
Problem Description
10進数Nを入力し、R進数出力に変換します.
Input
入力データは複数の試験例を含み、各試験例は2つの整数N(32ビット整数)とR(2<=R<=16,R<>10)を含む.
Output
変換された数をテストインスタンスごとに出力し、出力ごとに1行を占めます.Rが10より大きい場合、対応する数値規則は16進数(例えば、10はAで表されるなど)を参照する.
Sample Input
7 2
23 12
-4 3
Sample Output
111
1B
-11
10進数Nを入力し、R進数出力に変換します.
Input
入力データは複数の試験例を含み、各試験例は2つの整数N(32ビット整数)とR(2<=R<=16,R<>10)を含む.
Output
変換された数をテストインスタンスごとに出力し、出力ごとに1行を占めます.Rが10より大きい場合、対応する数値規則は16進数(例えば、10はAで表されるなど)を参照する.
Sample Input
7 2
23 12
-4 3
Sample Output
111
1B
-11
1 #include <stdio.h>
2 #include <math.h>
3 #include <string.h>
4 #include <ctype.h>
5
6
7 int a[1000];
8
9 int absplus(int n)
10 { return n>0?n:(-n); }
11
12 void print(int a[],int n)
13 {
14 int i;
15 for(i=n; i>=0; i--)
16 {
17 if(a[i]<10)
18 {
19 printf("%d",a[i]);
20 }
21 else
22 {
23 switch(a[i]%10)
24 {
25 case 0:printf("A");break;
26 case 1:printf("B");break;
27 case 2:printf("C");break;
28 case 3:printf("D");break;
29 case 4:printf("E");break;
30 case 5:printf("F");break;
31 }
32 }
33 }
34 }
35
36 void convert(int n, int R)
37 {
38 int i=0,p,j;
39 int t;
40 t=n;
41 n=absplus(n);
42 a[0]=n%R;
43 p=n/R;
44 while(p>=R)
45 {
46 a[++i]=p%R;
47 p=p/R;
48 }
49 a[++i]=p;
50 if(t>0)
51 {
52 print(a,i);
53 }
54 else
55 {
56 printf("-");
57 print(a,i);
58 }
59 printf("
");
60
61 }
62
63 int main()
64 {
65 int N,R;
66 while(scanf("%d%d",&N,&R)!=EOF)
67 {
68 if((N==1) || (N==0))
69 printf("%d
",N);
70 else
71 convert(N,R);
72 }
73 return 0;
74 }