看到几个要求数制转换的题目。
众所周知,人常用的是十进制,计算机常用的是二进制,为了观察方便,也常使用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语言编程:进制转换器
发布评论