1. 题目
给定一个不多于5位的正整数,完成以下两个要求:
- 求出该正整数是几位数。
- 逆序打印出该正整数各位数字。
2. 分析
- 求位数分析:
- 可以通过不断除以10的方式,直到该数变为0,记录除的次数,这个次数就是该数的位数。例如,对于数字123,第一次除以10得到12,第二次除以10得到1,第三次除以10得到0,共除了3次,所以123是三位数。
- 逆序打印分析:
- 同样利用除以10取余数的方式,每次得到的余数就是当前位的数字,将这些余数依次打印出来就能实现逆序打印各位数字。比如对于数字123,先取余数得到3,然后将原数除以10得到12,再取余数得到2,继续除以10得到1,取余数得到1,这样依次打印出3、2、1就实现了逆序打印。
3. 实例代码
实现方式一:直接操作法
#include <stdio.h>
int main() {
int num;
printf("请输入一个不多于5位的正整数:");
scanf("%d", &num);
int count = 0;
int temp = num;
// 求位数
while (temp!= 0) {
temp /= 10;
count++;
}
printf("该数是 %d位数。\n", count);
// 逆序打印各位数字
printf("逆序打印各位数字:");
while (num!= 0) {
int remainder = num % 10;
printf("%d", remainder);
num /= 10;
}
printf("\n");
return 0;
}
实现方式二:利用数组存储法
#include <stdio.h>
int main() {
int num;
printf("请输入一个不多于5位的正整数:");
scanf("%d", &num);
int digits[5];
int count = 0;
int temp = num;
// 将各位数字存入数组并求位数
while (temp!= 0) {
digits[count] = temp % 10;
temp /= 10;
count++;
}
printf("该数是 %d位数。\n", count);
// 逆序打印各位数字
printf("逆序打印各位数字:");
for (int i = 0; i < count; i++) {
printf("%d", digits[i]);
}
printf("\n");
return 0;
}
4. 输出结果
请输入一个不多于5位的正整数:1234
该数是 4位数。
逆序打印各位数字:4321