题目1080:进制转换

题目描述:

将M进制的数X转换为N进制的数输出。

输入:

输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

输出:

输出X的N进制表示的数。

样例输入:
16 10
F
样例输出:
15
提示:

输入时字母部分为大写,输出时为小写,并且有大数据。

 

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4   
  5 #define LEN 2000
  6   
  7 char str[LEN], another[LEN];
  8 int  ten[LEN];
  9   
 10 int switchToTen();
 11 void switchToAnother(int k, int n);
 12   
 13 int main()
 14 {
 15     int m, n, k;
 16   
 17     while (scanf("%d %d", &m, &n) != EOF) {
 18         scanf("%s", str);
 19           
 20         k = switchToTen(m);
 21   
 22         switchToAnother(k, n);  
 23     }
 24   
 25     return 0;
 26 }
 27   
 28 int switchToTen(int m)
 29 {
 30     int i, j, len, k, c;
 31   
 32     //初始化
 33     len = strlen(str);
 34     k = 1;
 35     memset(ten, 0, sizeof(ten));
 36   
 37     //转换为10进制数
 38     for (i = 0; i < len; i ++) {
 39         for (j = 0; j < k; j ++) {
 40             ten[j] *= m;
 41         }
 42         if (str[i] >= '0' && str[i] <= '9') {
 43             ten[0] += str[i] - '0';
 44         }else if (str[i] >= 'A' && str[i] <= 'Z') {
 45             ten[0] += str[i] - 'A' + 10;
 46         }else if (str[i] >= 'a' && str[i] <= 'z') {
 47             ten[0] += str[i] - 'a' + 10;
 48         }
 49   
 50         for (j = c = 0; j < k; j ++) {
 51             ten[j] += c;
 52       
 53             if (ten[j] >= 10) {
 54                 c = ten[j] / 10;
 55                 ten[j] %= 10;   
 56             }else {
 57                 c = 0;
 58             }
 59         }
 60   
 61         while (c) {
 62             ten[k ++] = c % 10;
 63             c /= 10;
 64         }
 65     }
 66   
 67   
 68     //翻转数组
 69     int temp;
 70     for (i = 0, j = k - 1; i < j; i ++, j --) {
 71         temp = ten[i];
 72         ten[i] = ten[j];
 73         ten[j] = temp;
 74     }
 75     return k;
 76 }
 77   
 78 void switchToAnother(int k, int n)
 79 {
 80     int sum, i, r, t, d;
 81   
 82     sum = 1;
 83     r = 0;
 84     memset(another, 0, sizeof(another));
 85   
 86     while (sum) {
 87         sum = 0;
 88   
 89         for (i = 0; i < k; i ++) {
 90             d = ten[i] / n;
 91             sum += d;
 92   
 93             if (i == k - 1) {
 94                 t = ten[i] % n;
 95                 if (t >= 0 && t <= 9) {
 96                     another[r] = t + '0';
 97                 }else {
 98                     another[r] = t - 10 + 'a';
 99                 }
100                 r ++;
101             }else {
102                 ten[i + 1] += ten[i] % n * 10;
103             }
104   
105             ten[i] = d;
106         }
107     }   
108  
109     for (i = r - 1; i >= 0; i --) {
110         printf("%c", another[i]);
111     }
112     printf("\n");
113 }

 

 

posted @ 2013-12-09 20:29  chchche  阅读(344)  评论(0编辑  收藏  举报