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

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

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

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

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

把不同进制的数字,转换成常用的十进制,用人工计算,还是很麻烦的。

为此,做而论道编写了一个小程序,可把2~36进制的数字转换成 2,4,8,10,16 进制显示出来。

程序如下:

//----------------------------------------------

#include

#include

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/question/352328038.html

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

更多推荐

c语言程序进制,C语言编程:进制转换器