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);
}

浙公网安备 33010602011771号