其实样例和我自己造的特殊的数据我都过了
就是不大清楚为什么会出错
本人思路这样子的:
首先用数组记录数据,然后排序
从大到小排序,从每个数的高位开始往地位比较
例如74 和 742
7=7,4=4,所以刚开始他是属于相等的
因为74的长度小于742且"742"末尾的2小于开头的7
所以74排在前面,742在后面
后面按照顺序输出就行了
下面是我的代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int a[1000]={0},n;
bool cmp(int x,int y){
string A="";
string B="";
while(x){
A+=(x%10+'0');
x/=10;
}
while(y){
B+=(y%10+'0');
y/=10;
}
reverse(A.begin(),A.end());
reverse(B.begin(),B.end());
char ch='=';
int m=min(A.size()-1,B.size()-1);
while(m>=0){
if(A[m]>B[m]){
ch='>';
break;
}
if(A[m]<B[m]){
ch='<';
break;
}
m--;
}
if(ch=='>')return true;
if(ch=='<')return false;
if(A.size()<B.size()){
if(B[A.size()]>=B[0])return false;
return true;
}
return false;
}
int main(){
scanf("%d",&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]);
}
return 0;
}