笔者首先是这么写的,但是只有3分
import java.util.Scanner;
public class pat1048 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String A = input.next();
String B = input.next();
String output = "";
int diff = B.length() - A.length(); //计算两个数字的位数差;
if(diff<0) diff = 0; //如果A的长度大于B的长度,diff归零
for(int i=0;i<diff;i++) output += (B.charAt(i)-'0'); //先输出不加密部分
String[] arr = {"0","1","2","3","4","5","6","7","8","9","J","Q","K"};
for(int i=diff;i<B.length();i++) {
if(i%2==0) { //如果是奇数,因为第一位diff是0,所以奇偶是反的
int num = (B.charAt(i) - '0') + (A.charAt(i-diff) - '0'); //两数相加
num = num%13; //13取余
output += arr[num];
}else {
int num = (B.charAt(i) - '0') - (A.charAt(i-diff) - '0'); //B-A
if(num<0) num += 10; //负数加10
output += arr[num];
}
}
System.out.println(output);
}
}
这是通过学习PauperGuy代码,改过以后的代码,我愿称这道题目的判定为NT,什么都没多学到,浪费了半小时。
import java.util.Scanner;
public class pat1048 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String A = input.next();
String B = input.next();
String output = "";
String[] arr = {"0","1","2","3","4","5","6","7","8","9","J","Q","K"};
int len;
int diff = A.length() - B.length(); //计算两个数字的位数差;
if(diff<0) for(int i=0;i<Math.abs(diff);i++) A = "0" + A; //如果B比A长,就用 “0” 来补全A
else for(int i=0;i<diff;i++) B = "0" + B; //A比B长,补全B
char[] arrA = A.toCharArray(), arrB = B.toCharArray();
len = arrA.length;
for(int i=len-1;i>=0;i--) {
if((len-i)%2==1) { //如果是奇数,因为第一位diff是0,所以奇偶是反的
int num = (arrB[i] - '0') + (arrA[i] - '0'); //两数相加
num = num%13; //13取余
output = arr[num] + output;
}else {
int num = (arrB[i] - '0') - (arrA[i] - '0'); //B-A
if(num<0) num += 10; //负数加10
output = arr[num] + output;
}
}
System.out.println(output);
}
}