解题思路:
首先须知,在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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复