zoukankan      html  css  js  c++  java
  • 题目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("
    ");
    113 }

     

  • 相关阅读:
    祝好,又十年
    关于简书的吐槽与思考还有杂七杂八负面情绪宣泄
    康威生命游戏———孤独会致命,拥挤也一样(转载)
    Bran的内核开发教程(bkerndev)-07 中断描述符表(IDT)
    Ubuntu安装QQ
    Bran的内核开发教程(bkerndev)-06 全局描述符表(GDT)
    Ubuntu安装scrcpy手机投屏和控制(Ubuntu用QQ微信的另一种方法)
    C、C++的Makefile模板
    C语言打印当前所在函数名、文件名、行号
    Bran的内核开发教程(bkerndev)-05 打印到屏幕
  • 原文地址:https://www.cnblogs.com/chchche/p/3466058.html
Copyright © 2011-2022 走看看