#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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论