数串
题目描述
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。
输出描述:
每组数据输出一个表示最大的整数。
示例1
输入
2 12 123 4 7 13 4 246
输出
12312 7424613
1 #include<stdio.h> 2 #include<iostream> 3 #include<string> 4 #include<sstream> 5 #define N 100 6 using namespace std; 7 string ts(int n) 8 { 9 ostringstream stream; 10 stream<<n; //n为int类型 11 return stream.str(); 12 } 13 bool cmp(string s1,string s2) 14 { 15 string str1=s1+s2; 16 string str2=s2+s1; 17 if(str1>str2) 18 return 1; 19 else 20 return 0; 21 } 22 int main() 23 { 24 int n; 25 int a[N]; 26 while(scanf("%d",&n)!=EOF) 27 { 28 string s=""; 29 for(int i=0;i<n;i++) 30 { 31 scanf("%d",&a[i]); 32 } 33 for(int i=0;i<n;i++) 34 { 35 for(int j=0;j<n-i-1;j++) 36 { 37 if(cmp(ts(a[j]),ts(a[j+1]))) 38 { 39 int temp=a[j+1]; 40 a[j+1]=a[j]; 41 a[j]=temp; 42 } 43 } 44 } 45 for(int i=n-1;i>=0;i--) 46 { 47 s+=ts(a[i]); 48 } 49 cout<<s<<endl; 50 } 51 return 0; 52 }