【发布时间】:2021-01-24 07:00:20
【问题描述】:
任务是找到由数组的数字组成的最大数字。例如:
输入:7、56、94、1 输出:947561
在代码中,我比较了 ab 和 ba,然后使用冒泡排序对数字进行排序。
我的代码适用于 80% 的测试用例,但我找不到错误。我没有考虑到哪里或哪种情况?提前致谢。
#include <iostream>
#include <cmath>
using namespace std;
typedef long long int ll;
ll len(ll n){
ll l = 0;
while (n > 0){
n /= 10;
l++;
}
return l;
}
ll concade(ll a, ll b){
ll con = a * pow(10, len(b)) + b;
return con;
}
void swap(ll *xp, ll *yp){
ll temp = *xp;
*xp = *yp;
*yp = temp;
}
void bubble_sort(ll arr[], ll n){
ll i, j;
for (i = 0; i < n - 1; i++){
for (j = 0; j < n-i-1; j++){
if (arr[j] == 0 && arr[j+1] != 0)
swap(arr[j], arr[j+1]);
if (concade(arr[j], arr[j+1]) < concade(arr[j+1], arr[j]))
swap(arr[j], arr[j+1]);
}
}
}
int main(){
ll n;
while (cin >> n){
if (n == 0)
break;
ll arr[1000000];
for(ll i = 0; i < n; i++){
ll x;
cin >> x;
arr[i] = x;
}
bubble_sort(arr, n);
for (ll i = 0; i < n; i++)
cout << arr[i];
cout << endl;
}
}
【问题讨论】:
-
请提供minimal reproducible example 输入、预期输出和实际输出
-
请注意,
pow是一个浮点函数,对于较大的数字可能无法返回准确的整数结果 -
尝试过任何失败案例的调试吗?你的发现在哪里?
-
typedef long long int ll-- 停止使用这些疯狂的宏,直接使用int64_t。代码看起来像是散布着数字11's。 -
@AlanBirtles 我可以用什么来代替 pow?
标签: c++ algorithm sorting numbers bubble-sort