用c语言(c)有一一个不多于5位的正整数,要求: ●求出它是几位数。 ●分别打印出每一-位数字。 按逆序打印出各位数字,例如原数为321 ,应输出123。 输出四个整数,要求按大小顺序输出。
时间: 2024-11-09 20:27:52 浏览: 25
在C语言中,你可以通过以下步骤来实现这个功能:
1. **判断位数**:
首先,获取输入的整数,然后用`log10()`函数计算它的最小有效位(即小数点前的位数)。因为`log10()`返回的是以10为底的对数,所以结果加1就是实际的位数。
```c
#include <stdio.h>
#include <math.h>
int main() {
int num, digits;
printf("请输入一个不超过5位的正整数: ");
scanf("%d", &num);
digits = floor(log10(num)) + 1; // 计算位数并向下取整
printf("该数字有 %d 位。\n", digits);
}
```
2. **打印每一位数字**:
使用循环结构,每次除以10并将余数存入另一个变量,直到商变为0,余数就是最后一位。然后逆序存储每一位数字。
```c
int digits_array[digits]; // 存储每一位的数组
// 逆序保存每一位数字
for (int i = digits - 1; i >= 0; i--) {
digits_array[i] = num % 10;
num /= 10;
}
printf("按逆序打印的每一位数字: ");
for (int i = 0; i < digits; i++) {
printf("%d", digits_array[i]);
}
```
3. **逆序打印输出**:
最后,将逆序后的数组元素按照从小到大的顺序输出。
```c
// 按顺序打印
for (int i = 0; i < digits; i++) {
if (i > 0) {
printf(" ");
}
printf("%d", digits_array[i]);
}
printf("\n");
```
4. **完整程序示例**:
```c
#include <stdio.h>
#include <math.h>
int main() {
int num, digits[6], temp;
printf("请输入一个不超过5位的正整数: ");
scanf("%d", &num);
digits[0] = num; // 直接保存原始数值,方便后续处理
for (int i = 1; i <= 5; i++) {
if (num >= pow(10, i)) { // 如果当前位数还没满,填充0
digits[i] = 0;
} else {
digits[i] = num % 10;
num /= 10;
}
}
printf("原始数字: %d\n", digits[0]);
printf("逆序打印的每一位数字: ");
for (int i = 0; i < 5; i++) {
printf("%d", digits[i]);
}
printf("\n");
printf("逆序打印并排序后的每位数字: ");
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (digits[j] < digits[i]) {
temp = digits[i];
digits[i] = digits[j];
digits[j] = temp;
}
}
printf("%d", digits[i]);
if (i != 4) {
printf(" ");
}
}
printf("\n");
return 0;
}
```
阅读全文