关于#c++#的问题:拼接后最大的整数是:111010输入格式第一行一个整数n

设有n个整数(3≤n≤100),将这些整数拼接起来,可以形成一个最大的整数。
例如:n=3,三个整数分别为21 7 34, 拼接后最大的整数为: 73421
再比如:n=3,三个整数分别是1 10 110,拼接后最大的整数是:111010
输入格式
第一行一个整数n ,表示有n 个整数。
第二行n个整数,数与数之间用一个空格分隔。
输出格式
输出到屏幕 。一个拼接后的最大的整数。
样例输入
3
21 7 34
样例输出
73421


#include <iostream>
#include <cstdlib>
#include <cmath>
#include <bits/stdc++.h>
using namespace std;
//int 转string
string intToString(int num) {
    char p[255];
    sprintf(p, "%d", num);
    string s(p);
    return s;
}
//string转int
int stringToint(const string&s) {
    return atoi(s.c_str());
}
//多个数组合合并为最大数,注意要将数组长度传入,在函数内部数组参数会转为指针,从而求不出长度
void composeBiggest(int num[], int len) {
    int tempNum;
    string temp1, temp2;
    for (int i = 0; i<len; i++) {
        for (int j = i + 1; j<len; j++) {
            temp1 = intToString(num[i]) + intToString(num[j]);
            temp2 = intToString(num[j]) + intToString(num[i]);
            if (stringToint(temp1) - stringToint(temp2)<0) {
                tempNum = num[i];
                num[i] = num[j];
                num[j] = tempNum;
            }
        }
    }
    for (int i = 0; i<len; i++) {
        cout << num[i];
    }
}
int main() {
    int a[110];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    cin>>a[i];
    composeBiggest(a, n);
    return 0;
}

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
using namespace std;
 
//定义比较规则
bool compare(const int& a, const int& b)
{
    return atoi((to_string(a) + to_string(b)).data()) > atoi((to_string(b) + to_string(a)).data()) ;//从大到小排序,使用字符串拼接
}
 
int main()
{
    int a[10] = {2, 3, 30, 305, 32, 334, 40, 47, 5, 1};
    vector<int> nums(a, a + 10);//输入一个整数数组
 
    sort(nums.begin(), nums.end(), compare);//使用sort函数排序,自定义规则
 
    for(auto x : nums)//从大到小输出,就是拼接成的最大整数
        cout << x;
    cout << endl;
 
    return 0;
}

请问一下时间空间限制是什么?

我会再发一个问答,关注我去看看,谢谢大家