解题思路:
首先须知,在c++中:
1、当一个整数/10时,不会产生小数。即int/int != float。例如:123/10=12,而不是12.3
2、当一个整数%10时,产生的数是该数的末位。即:123%10=12......3,所以,此时输出的是3
明白这两点后我们就可以通过 /10 来使数据变小,通过 % 10 求出数据的每一位
例:我们想求123的每一位就可以:
123%10=3,123/10=12;12%10=2,12/10=1;1%10=1,1/10=0。
得到123的每一位分别是3,2,1
由此,即可开始调用递归函数来实现求解
注意事项:
1、在dfs1()中需在每次输出后面加上空格以达到题目输出要求
2、在主函数中调用完dfs1()后需要输出换行以达到题目输出要求
3、在dfs2()中,每次输出完后不需要加空格以达到题目要求
参考代码:
#include<iostream>
using namespace std;
void dfs1(int a)//输出每一位的数
{
if (a > 0)//设置执行条件
{
dfs1(a / 10);//a每次向前挪动一位,即:1234->123->12->1
cout << a % 10 << " ";//挪到最前面后,%10,同时往前逐层退出函数,每退一次,得到一个数值。即1%10=1;12%10=2;123%10=3;1234%10=4...
}
}
void dfs2(int a)//输出倒排之后的数
{
if (a > 0)//设置执行条件
{
cout << a % 10;//和上述情况相反,即:1234%10=4,输出。
dfs2(a / 10);//再把数据往前挪动一位,即:1234/10=123...以此类推,最终得到反向输出的4321
}
}
int main()
{
int a;
cin >> a;
int b = a;//拿到a的值方便操作且不改变a本身
for (int c = 1; c < 10; c++)//输入数不大于5位,所以此处需c<6,为防止数据超出,我选择c<10
{
b=b / 10;//每次进循环b的位数减小一位,直到最后b=0时,所得到的c就是b的位数
if (b == 0)
{
cout << c << endl;//输出b的位数
break;
}
}
dfs1(a); cout << endl;
dfs2(a);
return 0;
}
0.0分
1 人评分
求圆的面积 (C语言代码)浏览:1366 |
妹子杀手的故事 (C语言代码)浏览:1297 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2098 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:687 |
矩阵乘方 (C语言代码)浏览:1079 |
简单的a+b (C语言代码)浏览:1024 |
剪刀石头布 (C语言代码)浏览:1519 |
第三届阿里中间件性能挑战赛-总决赛亚军比赛攻略浏览:1170 |
C二级辅导-等差数列 (C语言代码)浏览:891 |