Pta 1074 宇宙无敌加法器(详解+代码)

最近不知道怎么了,做题不如之前顺利了,以前前三道都很快的,现在2、3题都会卡很久,,,,。
解析:1.我是先将两个PTA数补零,方便遍历N的时候就一起遍历
2.遍历N,如果这个进制表有0,就让这个数为10
3.进位我们可以单独存一个变量v,v=(pta1+pta2+v)/n,因为小除大,返回的也是0,大除小是取整,正好符合进制要求
4.我们的进制后的数是(pta1+pta2+v)%n,被余数小的话是输出它本身,大的话就是余数,也符合我们的进制要求
5.1,3测试点很坑,是你的进制数V,他可能在所有的数都处理完后还有!所以我们还要处理最后的V,也就是 V=V%10 V=V/10

public class Pta_1074 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String N = br.readLine();
        String a = br.readLine();//第一个运算数
        String b = br.readLine();//第二个运算数
        List<Integer> results = new ArrayList<Integer>();
        //补零
        StringBuffer sb = new StringBuffer();
        StringBuffer sb1 = new StringBuffer();
        String a_zero = "";
        String b_zero = "";
        for (int i = 0; i < N.length() - a.length(); i++) {
            a_zero += "0";
        }
        for (int i = 0; i < N.length() - b.length(); i++) {
            b_zero += "0";
        }
        String P1 = String.valueOf(sb.append(a_zero + a));
        String P2 = String.valueOf(sb1.append(b_zero + b));

        //倒序比较
        List<Integer> list = new ArrayList<>();
        int flag = 0;//进位
        for (int i = N.length() - 1; i >= 0; i--) {
            int n = N.charAt(i) - 48;
            int pta1 = P1.charAt(i) - 48;
            int pta2 = P2.charAt(i) - 48;
            //0的话就是10进1
            if (n == 0) {
                n = 10;
            }
            int res1 = (pta1 + pta2 + flag) % n;//要添加的数  比余数小输出它自己
            list.add(res1);
            flag = (pta1 + pta2 + flag) / n;//小除大是0 因为可能是n的好几倍 所以还是用除最好再因为小除大是0,符合要求。

        }
        //进位还有很多的情况处理
        while(flag!=0){
            list.add(flag%10);
            flag=flag/10;
        }
        boolean bl = false;
        for (int i = list.size() - 1; i >= 0; i--) {
            if (list.get(i) != 0 || i == 0) {//把前面的多余的0去掉,如果只有一位有效,其他都是0的情况,所以i==0
                bl = true;
            }
            if (bl) {
                System.out.print(list.get(i));
            }
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值