codeup-数制转换

1942: 数制转换

Time Limit: 1 Sec  Memory Limit: 32 MB
Submit: 2738  Solved: 693
[ Submit][ Status][ Web Board][Creator:Imported]

Description

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

Input

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

Output

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

Sample Input

4 123 10

Sample Output

27

HINT

用字符串存储和表示不同进制的数。

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int main(){
  5     int a, b;
  6     char s[40];
  7     while(scanf("%d %s %d", &a, s, &b) != EOF){
  8         int len = strlen(s);
  9         //将字符串转换成数值!!! 
 10         for(int i=0; i<len; i++){
 11             if(s[i]>='0' && s[i]<='9') s[i] = s[i] - '0';
 12             if(s[i]>='a' && s[i]<='f') s[i] = s[i] - 'a' + 10;
 13             if(s[i]>='A' && s[i]<='F') s[i] = s[i] - 'A' + 10;
 14         }
 15         int sum=0, product=1;
 16         for(int i=len-1; i>=0; i--) {
 17             sum = sum + (int)s[i] * product;
 18             product = product * a;
 19         }
 20         int num = 0;
 21         //初始化!!! 
 22         memset(s, 0, sizeof(s));
 23         if(b==10){
 24             printf("%d\n", sum);
 25         }else{
 26             //很奇妙的转化方式!!! 
 27             do{
 28                 if(sum%b<10){
 29                     s[num++] = sum % b + '0';
 30                 }else{
 31                     s[num++] = sum % b - 10 + 'A';
 32                 }
 33                 sum /= b;
 34             }while(sum!=0);
 35             for(int i=num-1; i>=0; i--){
 36                 printf("%c", s[i]);
 37             }
 38             printf("\n");
 39         }
 40     }
 41     return 0;
 42 }
 43 
 44 /*
 45 //自己写的 
 46 void outPrintf(int n){
 47     if(n<10){
 48         printf("%d", n);
 49     }else{
 50         switch(n){
 51             case 10:
 52                 printf("A");
 53                 break;
 54             case 11:
 55                 printf("B");
 56                 break;
 57             case 12:
 58                 printf("C");
 59                 break;
 60             case 13:
 61                 printf("D");
 62                 break;
 63             case 14:
 64                 printf("E");
 65                 break;
 66             case 15:
 67                 printf("F");
 68                 break;
 69         }
 70     }
 71 }
 72 
 73 int changeNum(char c){
 74     int num;
 75     if(c=='0'){
 76         num = 0;
 77     }else if(c=='1'){
 78         num = 1;
 79     }else if(c=='2'){
 80         num = 2;
 81     }else if(c=='3'){
 82         num = 3;
 83     }else if(c=='4'){
 84         num = 4;
 85     }else if(c=='5'){
 86         num = 5;
 87     }else if(c=='6'){
 88         num = 6;
 89     }else if(c=='7'){
 90         num = 7;
 91     }else if(c=='8'){
 92         num = 8;
 93     }else if(c=='9'){
 94         num = 9;
 95     }else if(c=='a' || c=='A'){
 96         num = 10;
 97     }else if(c=='b' || c=='B'){
 98         num = 11;
 99     }else if(c=='c' || c=='C'){
100         num = 12;
101     }else if(c=='d' || c=='D'){
102         num = 13;
103     }else if(c=='e' || c=='E'){
104         num = 14;
105     }else{
106         num = 15;
107     }
108     return num;
109 }
110 
111 void getNum(char s[], int len, int ans[]){
112     int num;
113     for(int i=0, j=len-1; i<len; i++, j--){
114         ans[i] = changeNum(s[j]);
115     }
116 }
117 
118 int main(){
119     int a, b;
120     char s[40]; //n不一定全书0至9之间的数字,可能出现a,A等!故必须用字串存储 
121     while(scanf("%d %s %d", &a, s, &b) != EOF){
122         int ans[40], num;
123         int len = strlen(s);
124         getNum(s, len, ans);
125         unsigned long long int sum=0, product=1;
126         for(int i=0; i<len; i++){
127             sum = sum + ans[i] * product;
128             product = product * a;
129         }
130         num = 0;
131         do{
132             ans[num++] = sum % b;
133             sum /= b;
134         }while(sum!=0);
135         for(int i=num-1; i>=0; i--){
136             outPrintf(ans[i]);
137         }
138         printf("\n");
139     }
140     return 0;
141 }
142 */

猜你喜欢

转载自www.cnblogs.com/heyour/p/12149879.html
今日推荐