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位的正整数!