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位的正整数!
相关推荐
zfxwasaboy10 小时前
DRM KMS 子系统(4)Planes/Encoder/Connector
linux·c语言
极客代码11 小时前
深入解析C语言中的函数指针:原理、规则与实践
c语言·开发语言·指针·状态机·函数·函数指针
敲皮裤的代码11 小时前
《C语言》分支和循环(下)
c语言
喵了meme13 小时前
c语言经验分享
c语言·开发语言
Frank Castle15 小时前
【C语言】详解C语言字节打包:运算符优先级、按位或与字节序那些坑
c语言·开发语言
ltqshs16 小时前
vscode离线插件下载-vscode编译嵌入式C语言配置
c语言·ide·vscode
小乔的编程内容分享站16 小时前
C语言指针相关笔记
c语言·笔记
黎雁·泠崖20 小时前
Java&C语法对比:分支与循环结构核心全解析
java·c语言