高精度排序模板题 P1110

Description

给出N(<=1000)个不超过1000位的整数,然后将他们由小到大输出!


Input

第 1 行,一个整数N,接下来的N行,每行一个高精度数。  


Output

共 N 行,每行一个高精度数,并由小到大输出。


Hint

N<=1000


Solution

板子,简单到我不能逼逼的那种板子。。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define maxn 1005
using namespace std;
int a[maxn][maxn];
int n,cnt;
char ttmp[maxn],tmp[maxn];
struct data{
	int a[maxn];
	friend bool operator < (data x,data y){
		if(x.a[0]>y.a[0])return false;
	    if(x.a[0]<y.a[0])return true;
		for(int i=x.a[0];i>=1;i--){
			if(x.a[i]<y.a[i])return true;
			if(x.a[i]>y.a[i])return false;
		}
	}
}aa[maxn];
void init(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%s",ttmp);
		aa[i].a[0]=strlen(ttmp);
		for(int k=0;k<aa[i].a[0];k++){
			if(ttmp[k]!='0'){
				cnt=k;
				break;
			}
		}
		for(int q=cnt,j=0;q<=aa[i].a[0];q++,j++){
			tmp[j]=ttmp[q];
		}
		aa[i].a[0]=strlen(tmp);
		for(int u=1,j=aa[i].a[0]-1;u<=aa[i].a[0];u++,j--){
			aa[i].a[u]=tmp[j]-'0';
		}
		if(aa[i].a[0]==0)aa[i].a[0]=1;
	}
}
int main(){
	init();
	sort(aa+1,aa+1+n);
	for(int i=1;i<=n;i++){
		for(int j=aa[i].a[0];j>=1;j--){
			printf("%d",aa[i].a[j]);
		}
		printf("\n");
	}
	return 0;
}
posted @ 2018-11-30 16:49  虚拟北方virtual_north。  阅读(245)  评论(0编辑  收藏  举报