加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C语言将一个无符号整数转换为任意d进制

发布时间:2020-12-15 04:54:50 所属栏目:百科 来源:网络整理
导读:《C语言实例解析精粹》中编译环境采用的是Turbo C 2.0。但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记。 实例18:将一个无符号整数转换为任意d进制(d在2~16之间)。 主要思路:对无符号整数n求d的余数,就能

《C语言实例解析精粹》中编译环境采用的是Turbo C 2.0。但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记。

实例18:将一个无符号整数转换为任意d进制(d在2~16之间)。

主要思路:对无符号整数n求d的余数,就能得到n的d进制的最低位数字,重复上述步骤,直至n为0。依此得到n的d进制表示的最低位至最高位数字,由数字转换成字符,得到结果。

1 /*函数trans将无符号整数n转换成d进制(2<=d<=16)

2 表示的字符串s*/

3 #define M sizeof(unsigned int)*8 //将无符号数转换为字符串,每个字符8位

4 int trans(unsigned n,int d,char s[])

5 {

6 static char digits[] = "012345678ABCDEF";

7 char buf[M+1];

8 int j,i = M;

9

10 if(d<2 || d>16)

11 {

12 s[0] = ''; //字符串的截至位

13 return 0;

14 }

15

16 buf[i] = '';

17 do

18 {

19 buf[--i] = digits[n%d];

20 n /= d;

21 }while(n);

22 /*将工作数组中的字符串复制到s*/

23 for(j=0; (s[j]=buf[i]) != ''; j++,i++);

24 return j;

25 }

26

27 int main()

28 {

29 unsigned int num = 0;

30 int scale[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1}; //进制2~16

31 char str[33];

32 int i;

33 clrscr(); //清屏函数只在Turbo中使用 采用的方案是将其改为system("cls")

34 //但实际测试中此程序是否由这句对结果并没有什么影响。

35 puts("Please input a number to translate:");

36 scanf("%d",&num);

37 printf("The number you input is %d.nThe translation result are:n",num);

38 //此循环用来测试,显示同一个无符号整数转换成不同进制的结果。

39 for(i=0; i

40 {

41 if(trans(num,scale[i],str))

42 printf("%5d = %s(%d)n",num,str,scale[i]);

43 else

44 printf("%5d => (%d) Error!n",scale[i]);

45 }

46 printf("nPress any key to quit...n");

47 return 0;

48 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读