2.假设有n个正整数(n<=20),每个正整数均在int的范围之内,请编写C程序将它们连接在一起组成一个最大的多位数,并将组成的这个多位数输出显示。
时间: 2023-06-14 17:03:49 浏览: 113
可以采用字符串的方式来实现连接这n个正整数,然后比较大小排序即可。
具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 20
#define MAX_LEN 10
char nums[MAX_N][MAX_LEN];
int n;
int cmp(const void *a, const void *b) {
char s1[MAX_LEN * 2 + 1], s2[MAX_LEN * 2 + 1];
sprintf(s1, "%s%s", *(char**)a, *(char**)b);
sprintf(s2, "%s%s", *(char**)b, *(char**)a);
return strcmp(s2, s1);
}
int main() {
printf("请输入n:");
scanf("%d", &n);
printf("请输入%d个正整数:\n", n);
for (int i = 0; i < n; ++i) {
scanf("%s", nums[i]);
}
qsort(nums, n, sizeof(nums[0]), cmp);
printf("组成的最大的多位数为:%s\n", nums[0]);
return 0;
}
```
代码说明:
- 定义了一个二维字符数组 `nums`,用于存储输入的n个正整数。
- 接受用户输入n个正整数,并存储在 `nums` 数组中。
- 自定义一个比较函数 `cmp`,用于字符串比较大小。该函数中,将两个数分别按照顺序拼接起来,比较大小,从而实现最大的数排在最前面。
- 调用 `qsort` 函数,将 `nums` 数组中的元素按照自定义比较函数 `cmp` 进行排序。
- 输出排好序的数组中第一个元素,即为最大的多位数。
运行示例:
```
请输入n:5
请输入5个正整数:
3
30
34
5
9
组成的最大的多位数为:9534330
```
阅读全文