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位的正整数!
相关推荐
Zwawa13 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
揽星河..16 小时前
【C语言】分支和循环
c语言·c++·算法
揽星河..18 小时前
【C语言】猜数字游戏
c语言·算法·游戏
听风说ml1 天前
socket编程 【C语言】
c语言·udp·tcp·socket编程
学逆向的1 天前
C 局部静态变量
c语言·开发语言·网络安全
Zwawa2 天前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
二十七日秋2 天前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
abc light2 天前
ARM 裸机开发(1)——ARM 体系结构
c语言·arm开发
Navigator_Z2 天前
LeetCode //C - 1309. Decrypt String from Alphabet to Integer Mapping
c语言·算法·leetcode
爱聊灵光的维C2 天前
C语言初阶:关于函数设计的详细讲解和注意事项
c语言·开发语言·青少年编程·蓝桥杯·学习方法