题目介绍:
解题思想很简单: 两个数 a b 左右拼起来 比较ab ba 大小即可
如果 ab大 那就把 a放前面
ba大 那就把 b放前面
首先 有n个数来进行比较 可以采用qsort函数 来进行排序 我们设置比较函数就行
也可以用冒泡法 主要思想就是 如何比较两个数
我一开始想的是 用乘法来 拼ab
上述代码很好实现
但是!!! 注意数的范围
显然 两个10^9 这样的乘起来的话 long long型的都顶不住 会超范围
这里就可以采用 字符数组来拼数 每个元素存一位值 来比较大小即可
上代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int cmp(const void* e1, const void* e2)
{
char arr1[25];
char arr2[25];
long long a = (*((long long*)e1));
long long b = (*((long long*)e2));
long long c = a;
long long d = b;
int i = 0;
while (a)
{
arr1[i] = a%10;
i++;
a = a / 10;
}
while (b)
{
arr1[i] = b % 10;
i++;
b = b / 10;
}
int j = 0;
while (d)
{
arr2[j] = d % 10;
j++;
d = d / 10;
}
while (c)
{
arr2[j] = c % 10;
j++;
c = c / 10;
}
i = i - 1;
for (; i >= 0; --i)
{
if (arr1[i] > arr2[i])
return 1;
else
if (arr1[i] < arr2[i])
return -1;
}
return 0;
}
int main()
{
int n = 0;
scanf("%d", &n);
int long long arr[20] = { 0 };
int i = 0;
for (i = 0; i <= n - 1; ++i)
scanf("%lld", &arr[i]);
qsort(arr, n, sizeof(arr[0]), cmp); //快速排序 降序
for (i = 0; i <= n - 1; ++i)
{
printf("%lld", arr[i]);
}
return 0;
}
稍微解释一下:有了上述思想 具体代码实现应该不是问题
上述代码 函数里面的代码 还可以优化 这里就交给你们了。
两个我都 倒着存的 因为模10比较方便 最后比较从 后面往 前面 比较就行
qsort 快速排序函数 还是比较重要的
读者一定要去研读一下