C语言学习-菜鸟教程C经典100例-练习29

C语言学习-菜鸟教程C经典100例-练习29

题目

给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。


思路

  • 先判断这个数是几位数 -> 通过不断除以10来判断;
  • 分解数字 -> 通过算余数来获取每一位数字;
  • 逆序打印 -> 从个位开始提取并打印

代码

c 复制代码
#include <stdio.h>

int main(){
    int num;
    int count = 0; // 记录位数

    printf("请输入一个不多于5位的正整数:");
    scanf("%d", &num);

    // 判断位数正确
    if(num <= 0){
        printf("错误!请输入一个不多于5位的正整数!\n");
        return 1;
    }
    if(num > 99999){
        printf("错误!请输入一个不多于5位的正整数!\n");
        return 1;
    }

    int original = num; // 保存原数值
    int digit[5]; // 存储每一位数字

    printf("这个数字的逆序为:");

    // 计算位数
    while(num > 0){
        int digit = num % 10; // 个位数
        printf("%d ", digit); // 逆序打印
        num = num / 10; // 去掉个位数
        count++; // 位数加1
    }

    printf("\n这个数是一个%d位数。\n", count);

    return 0;
}

输出结果

c 复制代码
请输入一个不多于5位的正整数:12345
这个数字的逆序为:5 4 3 2 1 
这个数是一个5位数。

请输入一个不多于5位的正整数:123
这个数字的逆序为:3 2 1 
这个数是一个3位数。

请输入一个不多于5位的正整数:-1
错误!请输入一个不多于5位的正整数!

请输入一个不多于5位的正整数:123456
错误!请输入一个不多于5位的正整数!

#直接使用数学运算分解出每一位数

思路

依次分解每一位数,然后通过最高位是否为零来判断位数

代码

c 复制代码
#include <stdio.h>

int main(){
    int num;
    int a, b, c, d, e; // 各位数字

    printf("请输入一个不多于5位的正整数:");
    scanf("%d", &num);

    // 判断位数正确
    if(num <= 0){
        printf("错误!请输入一个不多于5位的正整数!\n");
        return 1;
    }
    if(num > 99999){
        printf("错误!请输入一个不多于5位的正整数!\n");
        return 1;
    }

    a = num / 10000; // 万位
    b = (num % 10000) / 1000; // 千位
    c = (num % 1000) / 100; // 百位
    d = (num % 100) / 10; // 十位
    e = num % 10; // 个位

    // 位数判断和输出
    if (a != 0) {
        printf("这个数是一个5位数。\n");
        printf("这个数的逆序是:%d%d%d%d%d\n", e, d, c, b, a);
    } else if(b != 0){
        printf("这个数是一个4位数。\n");
        printf("这个数的逆序是:%d%d%d%d\n", e, d, c, b);
    } else if(c != 0){
        printf("这个数是一个3位数。\n");
        printf("这个数的逆序是:%d%d%d\n", e, d, c);
    } else if(d != 0){
        printf("这个数是一个2位数。\n");
        printf("这个数的逆序是:%d%d\n", e, d);
    } else if(e != 0){
        printf("这个数是一个1位数。\n");
        printf("这个数的逆序是:%d\n", e);
    }

    return 0;
}

输出结果

c 复制代码
请输入一个不多于5位的正整数:12345
这个数是一个5位数。
这个数的逆序是:54321

请输入一个不多于5位的正整数:123456
错误!请输入一个不多于5位的正整数!

请输入一个不多于5位的正整数:123
这个数是一个3位数。
这个数的逆序是:321

请输入一个不多于5位的正整数:-1
错误!请输入一个不多于5位的正整数!
相关推荐
祈安_3 天前
C语言内存函数
c语言·后端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
czy87874754 天前
除了结构体之外,C语言中还有哪些其他方式可以模拟C++的面向对象编程特性
c语言
m0_531237174 天前
C语言-数组练习进阶
c语言·开发语言·算法
Z9fish5 天前
sse哈工大C语言编程练习23
c语言·数据结构·算法
代码无bug抓狂人5 天前
C语言之单词方阵——深搜(很好的深搜例题)
c语言·开发语言·算法·深度优先
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习
枫叶丹45 天前
【Qt开发】Qt界面优化(七)-> Qt样式表(QSS) 样式属性
c语言·开发语言·c++·qt
with-the-flow5 天前
从数学底层的底层原理来讲 random 的函数是怎么实现的
c语言·python·算法
Sunsets_Red5 天前
P8277 [USACO22OPEN] Up Down Subsequence P 题解
c语言·c++·算法·c#·学习方法·洛谷·信息学竞赛