C语言编程:进制转换器

看到几个要求数制转换的题目。

众所周知,人常用的是十进制,计算机常用的是二进制,为了观察方便,也常使用16进制表示二进制数。

WINDOWS 中计算器,可以进行常用进制的转换,但是它缺乏其它进制的转换功能。

为了学习进制,有时还要使用一些不常用的进制:5进制、7进制等等。

如果把英文字符也当做数字,那就有36个数字可以使用。使用这些数字,可知最大的进制就是36进制。

把不同进制的数字,转换成常用的十进制,用人工计算,还是很麻烦的。
为此,做而论道编写了一个小程序,可把2~36进制的数字转换成 2,4,8,10,16 进制显示出来。

程序如下:
//----------------------------------------------
#include <stdio.h>
#include <string.h>

void main()
{
    char aaa[16];
    unsigned char bbb, ccc, i, k, Err = 0;
    long unsigned int  nnn = 0;

    printf(" \n请输入数字 (0~9, A~Z): ");  gets(aaa);
    printf(" \n  当前进制 (2~36): ");  scanf("%d", &bbb);
//    printf(" \n  输出进制 (2,4,8,10,16): ");  scanf("%d", &ccc);
    for (i = 0; i < strlen(aaa); i++) {
      if (aaa[i] >= '0' && aaa[i] <= '9')  k = aaa[i] - 48;
      if (aaa[i] >= 'A' && aaa[i] <= 'Z')  k = aaa[i] - 55;
      if (k < bbb)  nnn = nnn * bbb + k;
      else {Err = 1;  break;}
    }
    if (!Err) {
      printf ("\n转换成 2,4,8,10,16进制,全部输出如下:");
      printf ("\n\n  2: ");   for (i = 32; i > 0; i--)  printf ("%d", (nnn >> (i - 1)) & 1);     
      printf ("\n\n  4: ");   for (i = 16; i > 0; i--)  printf ("%d", (nnn >> (2 * (i - 1))) & 3);
      printf ("\n\n  8: %o ", nnn);
      printf ("\n\n 10: %u ", nnn);
      printf ("\n\n 16: %X \n\n", nnn);
 }
    else  printf ("输入错误 ! \n");
}
//----------------------------------------------
程序运行时,显示如下:
//----------------------------------------------

请输入数字 (0~9, A~Z): ABCD1357

  当前进制 (2~36): 16

转换成 2,4,8,10,16进制,全部输出如下:

  2: 10101011110011010001001101010111

  4: 2223303101031113

  8: 25363211527

 10: 2882343767

 16: ABCD1357

Press any key to continue
//----------------------------------------------
输入32进制数字时,显示如下:
//----------------------------------------------

请输入数字 (0~9, A~Z): ABCD

  当前进制 (2~36): 32

转换成 2,4,8,10,16进制,全部输出如下:

  2: 00000000000001010010110110001101

  4: 0000001102312031

  8: 1226615

 10: 339341

 16: 52D8D

Press any key to continue
//----------------------------------------------

程序中,数字的变量 nnn 采用了无符号长整型,它的最大值是 4 294 967 295,即 43 亿 !
但是如果输入的数字和进制都较大,就完全可能突破 4294967295,这时,程序的输出就不准确了。
呵呵,因为这也就是简单的编程而已,超过 43 亿的,做而论道就不管了。
比尔·盖茨的财产虽较多,统计具体数字,他会自己编程。

//----------------------------------------------
原题网址:http://zhidao.baidu.com/question/352328038.html
原题网址:http://zhidao.baidu.com/question/354563386.html
回答者: 做而论道 | 十五级 采纳率:43%
提问者对于答案的评价:呵呵 你这个试过啦,挺好的!高人啊
//----------------------------------------------
本文发表了之后,发现文章的下边,出现好多“相关文章”,简略的看了看,没有一个能比做而论道的程序简短。呵呵

 

发布了532 篇原创文章 · 获赞 358 · 访问量 130万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览