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位的正整数!
相关推荐
cmpxr_5 小时前
【C】局部变量和全局变量及同名情况
c语言·开发语言
网域小星球8 小时前
C 语言从 0 入门(十七)|结构体指针 + 动态内存 + 文件综合实战
c语言·开发语言·文件操作·结构体指针·动态内存·综合项目
lcj25119 小时前
【C语言】数据在内存中的存储
c语言·数据结构
特立独行的猫a10 小时前
OpenHarmony平台移植 gifsicle:C/C++ 三方库适配实践(Lycium / tpc_c_cplusplus)
c语言·c++·harmonyos·openharmony·三方库适配·lycium
yashuk12 小时前
C语言 vs. C++ ,哪个更适合初学者?
c语言·c++·面向对象编程·初学者·学习路径
泛凡(Linyongui)13 小时前
PY32F002B实践之四--宠物腹背理疗仪项目踩坑及项目总结复盘
c语言·keil·32位单片机·腹背理疗仪项目实践·普苒py32
Hello小赵13 小时前
C语言如何自定义链接库——编译与调用
android·java·c语言
JaneHan_13 小时前
STM32CubeMX+HAL+Keil5 PWM呼吸灯
c语言·stm32·单片机
爱编码的小八嘎14 小时前
C语言完美演绎7-7
c语言
来日可期131414 小时前
C/C++ 反常识记录(1)—— 那些容易踩坑的语法细节
c语言·开发语言·c++