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 }
posted @ 2020-01-04 17:50  已是夕阳,不如放下  阅读(218)  评论(0编辑  收藏  举报