进制转换

在计算程序中,经常需要使用各种进制的数据,这就需要对数制进行转换。
将十进制整数转换为其他进制整数的计算过程是:将十进制数除以相应数制的基数,取其余数作为相应数制的最低位,再用商除以相应数制的基数,取余数作为相应数制的次低位……这样不断重复,即可完成转换。
这样描述可能概念上还有点模糊,下面以常用的二进制为例,看看相应的转换过程。
将十进制数转换为二进制数时,使用除以2取余法,即将十进制数除以2,取其余数为相应二进制数最低位,用商再除以2得到次低位……直到最后一次相除商为0时得到最高位。

例如,将十进制数121转换为二进制数的过程如下:


通过以上的算式计算,可得出:
(121)10 =(1111001)2
即十进制121转换为二进制数为1111001。
通过以上的竖式可以得出两点:
■ 数制转换的过程是数据逐步变小的过程,即构成了递归调用中的“将问题化为一个缩小了的子问题”的特点。

■ 在数制转换过程中有递归的结束条件,即当商为0时结束递归过程

1 #include <stdio.h>
2 #include <string.h>
3 void convto(char *s, int n, int b) //函数声明
4 {
5 char bit[]={"0123456789ABCDEF"};
6 int len; //声明变量
7 if(n==0)
8 {
9 strcpy(s,"");
10 return;
11 }
12 convto(s, n/b, b); //递归
13 len = strlen(s);
14 s[len] = bit[n%b];

15 s[len+1] = '\0';

16 }
17
18 void main(void) //主函数
19 {
20 char s[80];
21 int i, base,old;
22 printf("请输入十进制数:");
23 scanf("%d",&old);
24 printf("请输入转换的进制:");
25 scanf("%d", &base);
26 convto(s, old, base); //对数制转换
27 printf("%s\n", s);
28 getch();
29 return;

30 }

程序说明】
■ 第3~16行为递归调用函数,在该函数中使用了3个参数,第1个参数为一个字符串s,用来保存转换后的结果;参数n是需要转换的数;参数b是需要转换的进制。
■ 第12行调用函数自身,构成递归调用。
■ 第18~30行为主函数,让用户输入需要转换的十进制数和需要转换的进制。第26行调用convto函数进行数制转换。


摘自:《零基础学算法 第3版 》 — 戴艳
在豆瓣阅读书店查看:https://read.douban.com/ebook/8190312/





摘自:《零基础学算法 第3版 》 — 戴艳
在豆瓣阅读书店查看:https://read.douban.com/ebook/8190312/
本作品由华章数媒授权豆瓣阅读全球范围内电子版制作与发行。
© 版权所有,侵权必究。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值