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 }

     

  • 相关阅读:
    淘宝技术这十年(淘宝技术大学校长解密淘宝十年)
    Go Web编程(Go语言性能好、语法简单、开发效率高!)
    辨别虚假流量的十二种方法
    收获,不止Oracle(顶级专家盖国强、冯春培、黄志洪等联袂力荐)
    演说之禅:职场必知的幻灯片秘技(第2版)(全彩)
    篮球词汇(转)
    Xilinx 网站资源导读
    乔布斯2005年在斯坦福毕业典礼的演讲稿
    FPGA中BRAM初始化文件格式的总结_ALTERA/XILINX
    写给还在上班的人(转)
  • 原文地址:https://www.cnblogs.com/chchche/p/3466058.html
Copyright © 2011-2022 走看看