C语言写一个输入一个正整数,并用递归排序这个正整数的各位并输出
时间: 2024-10-22 09:17:17 浏览: 31
C语言编程训练:递归-整数分解为若干个整数之和
在C语言中,我们可以利用递归来实现数字的每位排序。这里有一个简单的示例,它会将用户输入的正整数的每一位进行比较、交换(如果需要),然后再对剩余位进行同样的操作,直到整个数字变成有序的。请注意,这种方法只适用于非负整数,因为递归终止条件依赖于每一位都是0。
```c
#include <stdio.h>
// 交换两个字符函数
void swap(char *x, char *y) {
char temp = *x;
*x = *y;
*y = temp;
}
// 递归排序函数
int sortDigit(char num[], int size) {
// 基础情况:当只剩一位或者已经排序好
if (size <= 1 || num[0] >= num[1]) {
return 0; // 如果数组已排序,返回0表示完成
}
// 交换当前最大和下一个元素的位置
swap(&num[size - 1], &num[size - 2]);
sortDigit(num, size - 1); // 递归处理剩余部分
return 1; // 表明还有未排序的部分,返回1继续循环
}
int main() {
printf("请输入一个正整数:");
char input[20];
scanf("%s", input);
// 添加字符串结束符'\0'
input[strlen(input)] = '\0';
// 确保输入的是正整数
for (int i = 0; input[i] != '\0'; i++) {
if (input[i] < '0' || input[i] > '9') {
printf("错误:输入包含非数字字符。\n");
return 1;
}
}
// 转换字符串到字符数组以便进行操作
char digits[strlen(input) + 1];
for (int i = 0; i < strlen(input); i++) {
digits[i] = input[i] - '0';
}
int sorted = sortDigit(digits, strlen(digits));
if (!sorted) {
printf("排序后的数字:%s\n", input);
} else {
printf("无法通过递归排序:输入已经是升序排列。\n");
}
return 0;
}
阅读全文