题目如下
编程,输入一个十进制正整数,然后输出它所对应的八进制数。
十进制中采用每逢十进一的计数方式
而八进制中采用每逢八进一的计数方式
基于此由以下理解
十进制中十分位的数字n代表该数中权重n*10的部分——如123中2的权重为20即2*进制数
百分位的数字m代表该数中权重m*100的部分—————123中1可表示为100即1*进制数
八进制同理
我们先研究特定情况下的进制转换
用以上方法拆解用十进制数表示的数100并换算成八进制数
预期逻辑为
S1先得到用十进制位表示的8的个数;即用100/8得到12
S2此时我们就有用十进制表示的8的个数,那么100%8的数便作为低位 --4
S3同理处理十进制表示的12;即12/8得到1,那么此时1表示12八进制表达中1*8权重的部分;余下的小数12%8=4表示12中8*1的部分,那么我们就可以得到十二的八进制表达14
S4此时我们用八进制的14表示的12(十进制)带入s1,我们就可以得到一个完全由八进制表示的数100(十进制)
再使用递归框架来处理一般情况;
我们使用以下函数来作为递归的返回条件,进入函数执行时,我们应得到了某个数的最低位
if (x / 8==0)
return x;
再使用ret(x /8)作为逼近条件
并在每次返回中时用*10的方式来随着数字权重的增加进行移位处理
最后补齐函数其他内容的得到以下函数
int ret(int x);
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
a=ret(a);
printf("%d", a);
return 0;
}
int ret(int x)
{
if (x / 8==0)
return x;
else
return ret(x /8) * 10+x%8;
}