题目
本题是《谭浩强c程序设计》4.9题。
题目:
9. 给一个不多于5位的正整数,
要求:①求出它是几位数; ②分别输出每一位数字; ③按逆序输出各位数字,例如原数为321, 应输出123
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj
一、解题思路
思路:
按题目要求编写3个函数实现各自的功能,实现使用数字分割法求位数,数字每除10就加一位数,条件是该数大于0;然后使用递归实现正序输出,条件是该数小于10时输出当前数然后退出递归,否则递归调用自己的当前数除10,然后输出当前数;最后是逆序输出函数,相当于直接在第一个函数的循环体中增加一条语句:printf 当前数%10即可。
二、代码部分
1.引入库
代码如下(示例):
#include<stdio.h>
2.主函数部分
代码如下(示例):
void outputfig(int fig,int i)//数字分割法求数字的位数
{
while (fig > 0)
{
fig /= 10;
i++;
}
printf("你输入的数字是%d位数\n", i);
}
void myprint(int fig)//递归实现正序输出
{
if (fig < 10)
printf("%d ", fig);
else
{
myprint(fig/ 10);
printf("%d ", fig%10);
}
}
void reorder(int fig, int i)//直接输出每次的余数即可实现逆序输出
{
while (fig > 0)
{
printf("%d ", fig % 10);
fig /= 10;
}
}
int main()
{
int fig,i=0;
while (1)
{
printf("请输入一个不多于5位的正整数:\n");
scanf("%d", &fig);
if (fig > 99999 || fig < 0)
printf("你输入的数据有误,");
else
break;
}
outputfig(fig,i);//①求出它是几位数
printf("正序分别输出每一位数字\n");
myprint(fig);//②分别输出每一位数字
printf("\n");
printf("按逆序输出各位数字\n");
reorder(fig, i);//③按逆序输出各位数字
return 0;
}
三、执行结果
输入:
1234
输出:
你输入的数字是4位数
正序分别输出每一位数字
1 2 3 4
按逆序输出各位数字
4 3 2 1