导入
一.十进制转换为二进制数字为例子
十进制 | 二进制 |
---|---|
1 | 1 |
2 | 10 |
3 | 1%1 |
10 | 1010 |
二.以十进制位获得每一位数字为例子
1 -----> 1%10=1
11 -----> 11%10=1 + (11/10 )%10=1
123-----> 123%10=3 + ( 123/10)%10=2 + (123/10/10)%10=1
<注>:此时我们不难发现我们这样得到的数字是从低位数字到高位数字(一会将会用到此内容)
分析
xxxx我们首先需要将转换的每个进制位的数字计算出来,而计算的方式就是不断地模上该进制数字,获得最低位数字,再将原数字除上进制数字,获得较高位数字,直到原数字变成0结束,然后将数字从高位到低位挨个输出即可获得转换后的进制数字.
xxxx但是这里会出现一个问题,就是我们是从低位开始获得数字,而输出的时候要求从高位输出。
xxxx对于这个问题,我们很容易想到可以先把所有数字用数组储存起来,最后再反向输出,即可完成任务,这种方式我在这里就先不阐述,我在面对这个问题的时候,觉得应该可以用递归的方式解决这个问题。因为我们知道递归就是函数调用自己的一个过程,而在不断调用,函数递归深度不断加大直到递归结束的时候,我们首先得到的数字就是最后一次函数调用得到的数字(即是最高位数字)
举例说明:
将十进制的5 转换为二进制数字:
(第一步)5%2=1 (这个1就是二进制数字中第一位数字) 然后5/2=2(此时我们再把2作为一个数字求他的二进制位)
(第二步) 2%2=0 (0是二进制数字中第二位数字) 然后2/2=1(此时我们再把1作为一个数字求它的二进制位)
(第三步)1%2=1 (这个1就是它的第三位数字) 然后1/2=0(结束)
代码实现
下面我们进行代码的具体实现:
int main()
{
int num = 0; //用于存放一个数字
int scale = 0; //用于存放你选择的进制
printf("请输入一个十进制数字:>");
scanf("%d", &num);
printf("请输入你将转换的进制:>");
scanf("%d", &scale);
fun(num, scale);
printf("\n");
return 0;
}
void fun(int num, int scale)
{
if (num/scale) //如果num>=scale 说明在该进制下的数字
fun(num / scale, scale);
printf("%d", num%scale);
}
效果展示