P1781宇宙总统

宇宙总统

题目描述

地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n 个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。

输入格式

第一行为一个整数 n,代表竞选总统的人数。

接下来有 n 行,分别为第一个候选人到第 n个候选人的票数。

输出格式

共两行,第一行是一个整数 m,为当上总统的人的号数。

第二行是当上总统的人的选票。

样例 #1

样例输入 #1

5
98765
12365
87954
1022356
985678

样例输出 #1

4
1022356

提示

票数可能会很大,可能会到 100 位数字。

代码

import java.util.Scanner;

//P1781 宇宙总统
//票数可能会很大,可能会到 100 位数字。
//1≤n≤20。

public class UniversePresident {

	public static void main(String[] args) {
        //输入的数字可能会很大,超过了int类型范围甚至超过了long类型,所以使用String类型处理,或者使用BigInteger

        Scanner scanner = new Scanner(System.in);
        //输入n和选票
        int n = scanner.nextInt();
        String[] vote = new String[n];
        for (int i = 0; i < vote.length; i++) {
            vote[i] = scanner.next();
        }

        if (n == 1) {
            System.out.println(vote[0]);
            return;
        }

        int res = 0;
        //比较String
        for (int i = 1; i < vote.length; i++) {
            //比较String的长度
            if (vote[i].length() > vote[res].length()) {
                res = i;
            }else if (vote[i].length() == vote[res].length()) {	//位数相等,比较大小
                for (int j = 0; j < vote[res].length(); j++) {
                    if (vote[i].charAt(j) > vote[res].charAt(j)) { //如果不设置条件改变j,那下一次比较的就是下一位,就会造成错误
                        res = i;
                        break;
                    }else if (vote[i].charAt(j) == vote[res].charAt(j)) {
                        continue;
                    }else   //还有vote[i].charAt(j) < vote[res].charAt(j) 的可能
                        break;
                }
            }
        }
        System.out.println(res+1);
        System.out.println(vote[res]);
        return;
    }

}

思路分析

使用字符串对大数字进行比较

先比较 String 的长度,如果长度相等,则先比较这两个字符串的大小

从高位开始比较,如果出现不同,则退出这个循环。(注意在这里的逻辑不要写错,一定要想清楚)

分享另一种解法:BigInteger解法

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值