给一个不多于5位的正整数,要求: 求出它是几位数; ②分别输出每一位数字; ③按逆序输出各位数字,例如原数为321,应输出 123。用c语言生成
时间: 2024-10-21 11:13:58 浏览: 19
在C语言中,你可以通过以下步骤来实现这个功能:
1. **确定位数**:
使用`log10`函数可以计算一个数的位数。因为`log10(10^n) = n`,所以如果对输入的数取以10为底的对数,并向上取整,得到的就是位数。注意,对于非负整数,`log10(num)`的结果不会超过1。
```c
int num, digit_count;
digit_count = (int)(log10(num) + 1);
```
2. **提取每位数字**:
使用循环和取模运算 `%` 来获取每一位数字。从最低位开始,每次将原始数除以10并保存余数作为当前位的值。
```c
while (num > 0) {
int current_digit = num % 10;
// 处理每一位数字的逻辑...
num /= 10; // 减去最后一位
}
```
3. **逆序输出**:
可以创建一个新的数组存储逆序的数字,然后遍历这个数组进行输出。记得在存储前先分配足够的空间。
```c
int reversed_digits[digit_count];
for (int i = 0; i < digit_count; ++i) {
reversed_digits[i] = num % 10;
num /= 10; // 用于下一次循环
}
// 逆序打印
for (int i = digit_count - 1; i >= 0; --i) {
printf("%d", reversed_digits[i]);
}
printf("\n");
```
**完整示例**:
```c
#include <stdio.h>
#include <math.h>
int main() {
int num, digit_count;
printf("请输入一个不超过5位的正整数:");
scanf("%d", &num);
digit_count = (int)(log10(num) + 1);
// 逆序存储
int* reversed_digits = malloc(digit_count * sizeof(int));
for (int i = 0, temp_num = num; i < digit_count; ++i) {
reversed_digits[i] = temp_num % 10;
temp_num /= 10;
}
// 输出原数位数
printf("位数:%d\n", digit_count);
// 输出每一位
printf("每一位:");
while (temp_num > 0) {
printf("%d", temp_num % 10);
temp_num /= 10;
}
printf("\n");
// 逆序输出
printf("逆序:");
for (int i = digit_count - 1; i >= 0; --i) {
printf("%d", reversed_digits[i]);
}
printf("\n");
free(reversed_digits); // 注意释放内存
return 0;
}
```
阅读全文