解题思路:
定义一个原型为 void f(int n) 的函数进行进制转换,在该子函数中进行递归调用。编程之前我们先思考一下如何将一个十进制的数转换成八进制,我们可以用“除基取余法”,即将十进制数除以8获得一个商和余数(当整除时不要以为0不是余数,这时0就是余数),再把获得的商除以8再获得一个商和余数......一直重复以上步骤,直到商为零为止。我们可以看出有重复的步骤:将获得的商除以8获得新的商和余数。因此,我们能够用递归函数解决这个问题。同时,我们应该找到递归出口,通过编程之前对如何将十进制数转换成8进制数这个问题的思考,我们可以找到递归函数的出口就是当商为零时(n/8==0)。还有一个需要注意的问题就是,要把余数逆向输出,所以要将 printf("%d",n%8); 放在 f(n/8); 之后。希望读者能通过一道简单的题目深刻理解一个知识点。
注意事项:
读者如果对递归函数理解得不够好,理解该程序可能会有一些困难。如果我哪里讲解得不够好,甚至是错误,还请指出。
参考代码:
#include
void f(int n) //函数用来进制转换
{
if(n/8==0) //递归出口,当商为0时(n/8==0)时停止递归调用
printf("%d",n%8);
else
{
f(n/8);
printf("%d",n%8); //放在函数调用之后,可以逆向输出余数
}
}
int main()
{
int n;
scanf("%d",&n);
f(n);
putchar('\n');
return 0;
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复