大整数排序

题目:牛客网

解题思路:

大数位数最多的数值最大,若位数相同则从第一位开始比较,相同位的数字大的数值大。

与成绩排序相似,对Comparator做相应的修改即可。

1、大数无法直接比较,需要用String来表示

2、将大数放到一个list中

3、使用Collections对list进行排序,Comparator:用位数即string的长度作为排序的依据

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
	public static void sortNumber(ArrayList<String> numlist){
		//引入Comparator,指定比较的算法
		Comparator<String> c = new Comparator<String>() {
			@Override
			//compare函数返回值大于0则交换o1和o2,小于0则不交换
			public int compare(String o1, String o2) {
				// TODO Auto-generated method stub
				if(o1.length() > o2.length())
					return 1;
				else if(o1.length()== o2.length()){
					for(int i = 0 ; i < o1.length(); i++){
						int temp1 = (int)o1.charAt(i);
						int temp2 = (int)o2.charAt(i);
						if(temp1 > temp2){
							return 1;
						}
						else if(temp1 < temp2){
							return -1;
						}
					}
					return -1;
				}
				else{
					return -1;
				}
			}
        };
        Collections.sort(numlist, c); 
		for(int i = 0; i < numlist.size(); i++){
			System.out.printf("%s%n", numlist.get(i));
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		while(in.hasNext()){
			int num = in.nextInt();
			ArrayList<String> numlist = new ArrayList<String>();
			for(int i = 0; i < num; i++){
				String str = in.next();
				numlist.add(str);
			}
			sortNumber(numlist);
		    
		}

	}

}

 

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务