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位的正整数!
相关推荐
她说彩礼65万12 小时前
C语言 文件
linux·服务器·c语言
努力努力再努力wz18 小时前
【MySQL进阶系列】一文打通事务机制:从锁、Undo Log 到 MVCC 与隔离级别
c语言·数据结构·数据库·c++·mysql·算法·github
薇茗18 小时前
【初阶数据结构】 左右逢源的分支诗律 二叉树1
c语言·数据结构·算法
eDEs OLDE18 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
广州山泉婚姻19 小时前
C语言三种基本程序结构详解
c语言·开发语言
上弦月-编程19 小时前
【C语言】函数栈帧的创建与销毁(底层原理)
c语言·开发语言
Hhy_110719 小时前
【从零开始学习数据结构 ④】:栈 ——后进先出的艺术
c语言·数据结构·学习·visual studio
爱编码的小八嘎19 小时前
c语言完美演绎9-17
c语言
广州山泉婚姻19 小时前
C++ STL Vector 入门与实战全攻略
c语言·c++
我不是懒洋洋20 小时前
【数据结构】排序算法(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序)
c语言·数据结构·c++·经验分享·算法·排序算法