【九度】题目1190:大整数排序

题目地址:http://ac.jobdu.com/problem.php?pid=1190
题目描述:

对N个长度最长可达到1000的数进行排序。

输入:

输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。

输出:

可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。

样例输入:
3
11111111111111111111111111111
2222222222222222222222222222222222
33333333
样例输出:
33333333
11111111111111111111111111111
2222222222222222222222222222222222
来源:
2006年华中科技大学计算机研究生机试真题
这是一类题目,除了排序之外,还是大数据处理。在Jobdu上还有另外一类,做大数据的加减乘除以及进制转换。
在这里,我们将大数据当做字符串来处理。
如果长度一样的话,就比较大小。否则就比较长度。
直接排序,输出结果。
C++ AC
#include<iostream>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
const int maxn = 102;
int i,n;
string array[maxn]; 
bool cmp(string s1, string s2){
    if(s1.size() == s2.size()){
        return s1 < s2;
    }else {
        return s1.size() < s2.size();
    }
}
int main(){     
    while(cin >> n){
        for(i = 0 ; i < n; i++){
            cin >> array[i];
        }
        sort(array, array+n ,cmp);
        for (i = 0; i < n; i++) {
            cout << array[i] << endl;
        } 
    }
    return 0;
}
/**************************************************************
    Problem: 1190
    User: wangzhenqing
    Language: C++
    Result: Accepted
    Time:20 ms
    Memory:1528 kb
****************************************************************/

Java AC

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner; 
public class Main {
    /*
     * 1190
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int N = scanner.nextInt();
            String array[] = new String[N];
            for (int i = 0; i < N; i++) {
                array[i] = scanner.next();
            }
            Arrays.sort(array , new sortString());
            for (int i = 0; i < N; i++) {
                System.out.println(array[i]);
            }
        }
    }
}
class sortString implements Comparator<String>{ 
    public int compare(String o1, String o2) {
        if (o1.length()!=o2.length()) {
            return o1.length() - o2.length();
        }else {
            return o1.compareTo(o2);
        }
    }
}
/**************************************************************
    Problem: 1190
    User: wzqwsrf
    Language: Java
    Result: Accepted
    Time:320 ms
    Memory:26108 kb
****************************************************************/

你可能感兴趣的:(【九度】题目1190:大整数排序)