拼接數字(知識點:string的使用和sort的cmp)

Tiny_W發表於2018-03-24

拼接數字

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

 給定一個正整數陣列,現在把陣列所有數字都拼接成一個大數字,如何使得拼接後的數字最小。

Input:

輸入包含多組測試資料,每組資料首先輸入一個整數n(1<=n<=10000),接下來有n個整數a[i](1<=a[i]<=10^5);

Output:

對於每組資料,輸出拼接後最小的數字。

Sample Input:

3
3 32 321

Sample Output:

321323


程式碼:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool cmp(int a,int b)//注意:a是陣列中的後一個元素,b是陣列中的前一個元素,return true代表交換這兩個元素
{
    string aa;//定義一個string
    string bb;
    while(a)
    {
        aa+=a%10;//string不能用類似陣列x[0] = y這種方法賦值,只能用加法,如給一個string x加上一個元素y,則x+=y
        a/=10;
    }
    while(b)
    {
        bb+=b%10;
        b/=10;
    }
    reverse(aa.begin(),aa.end());//對string陣列進行翻轉。
    reverse(bb.begin(),bb.end());
    return (bb+aa) > (aa+bb);
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int a[n];
        for(int i = 0;i < n;i++)
            scanf("%d",&a[i]);
        sort(a,a+n,cmp);
        for(int i = 0;i < n;i++)
            printf("%d",a[i]);
        printf("\n");
    }
    return 0;
}

相關文章