共计 822 个字符,预计需要花费 3 分钟才能阅读完成。
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入格式:输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式:在一行中输出加密后的结果。
输入样例:1234567 368782971
输出样例:
3695Q8118
Think
A 和 B 长度不同时需要补零,例如 1234567 368782971A:001234567B:368782971 使得长度相等
code
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] ist = in.nextLine().split(” “);
String t = “0123456789JQK”,s = “”;
int bo = ist[0].length() – ist[1].length(),le;
if(bo < 0) {
for(int i = 0 ; i < Math.abs(bo) ; i++) {
ist[0] = “0” + ist[0];
}
} else {
for(int i = 0 ; i < bo ; i++) {
ist[1] = “0” + ist[1];
}
}
char[] A = ist[0].toCharArray(), B = ist[1].toCharArray();
le = A.length;
for(int i = le – 1 ; i >= 0 ; i–) {
if((le – i) % 2 == 1) {// 基数
s = t.charAt((A[i] – ‘0’ + B[i] – ‘0’) % 13) + s;
} else {
s = (B[i] – A[i] + 10) % 10 + s;
}
}
System.out.print(s);
}
}