#include<stdio.h>
#include<math.h>
int main()
{
int n, m, y, i, j, k = 1; // 定义变量:n-输入数字, m-备份n, y-处理高位输出, k-数字位数(初始为1)
scanf("%d", &n); // 读取输入数字
m = n; // 备份原始数字,因为后面n会被修改
// ========== 第一部分:计算数字位数 ==========
if(n == 0) // 特殊情况:输入为0
{
k = 1; // 0是1位数
}
else // 一般情况:输入不为0
{
int t = n; // 使用临时变量t,避免破坏原始n值
while(t >= 10) // 当t大于等于10时循环(关键:>= 处理10,100等边界)
{
t /= 10; // 去掉最后一位数字
k++; // 位数加1
}
// 循环结束时:k就是数字的总位数
// 例如:1234 → 123 → 12 → 1,循环3次,k=1+3=4
}
printf("%d\n", k); // 输出数字位数
// ========== 第二部分:从高位到低位输出数字 ==========
j = k; // j作为循环计数器,从总位数k开始
y = m; // y使用备份的原始数字
for(; j > 1; j--) // 循环k-1次(处理前k-1位数字)
{
// 计算当前位的数字:数字 / 10^(j-1)
// 例如:1234, j=4: 1234/1000=1, j=3: 234/100=2, j=2: 34/10=3
printf("%d ", y / (int)pow(10, j-1));
// 去掉已经输出的高位:数字 % 10^(j-1)
// 例如:1234%1000=234, 234%100=34, 34%10=4
y = y % (int)pow(10, j-1);
}
printf("%d\n", y); // 输出最后一位数字(此时y只剩个位数)
// ========== 第三部分:从低位到高位输出数字(逆序)==========
for(i = 0; i < k; i++) // 循环k次,输出所有数字
{
printf("%d", m % 10); // 输出最后一位数字:数字 % 10
m = m / 10; // 去掉最后一位数字:数字 / 10
// 例如:1234 → 输出4, m=123 → 输出3, m=12 → 输出2, m=1 → 输出1
}
printf("\n"); // 输出换行
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复