Java题解—1016 部分A+B (15 分)

原题

点击跳转

代码

package pat;

import java.util.Scanner;

/**
 * @Description
 */
public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String A=scanner.next();
        int Da=scanner.nextInt();
        String B=scanner.next();
        int Db=scanner.nextInt();

        System.out.println(splice(A, Da) +splice(B, Db));

    }
    //计算关键数出现的次数,然后合成数字
    public static int splice(String num,int key){
        int result=0;
        int count=0;
        char ch=(char) (key+48);//已知字符'0'对应的整型是48
      for (int i=0;i<num.length();i++){
          if (num.charAt(i)==ch){
              result+=key*Math.pow(10,count);//Math.pow(底数,指数)
              count++;
          }
      }
        return result;
    }
}

看了别人的题解不更了的题解这样写更为简单
用long型接收(int型也可以,可表示10位数),然后对数字循环取10的余数判断相等,循环退出条件每次除以10。

自己照写了下,测试竟然运行超时了,数字很大取余运算费时吗?(笑哭)

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int A=scanner.nextInt();
        int Da=scanner.nextInt();
        int B=scanner.nextInt();
        int Db=scanner.nextInt();

        int resultA=0;
        int resultB=0;
        while (A!=0){
            if (A%10==Da)
                resultA=resultA*10+Da;//原来的数进一位
            A=A/10;
        }
        while (B!=0){
            if (B%10==Db)
                resultB=resultB*10+Db;
            B=B/10;
        }
        System.out.println(resultA+resultB);
    }
posted @ 2021-10-19 15:24  Infinite_V胜  阅读(30)  评论(0)    收藏  举报