当数据格式一致时,处理会更加方便。
分别处理长串和短串,不仅容易乱,而且还容易忽略细节。
import java.util.Scanner;
/**
* 首先固定一个加密用正整数 A,对任一正整数 B,将其每 1位数字与 A 的对应位置上的数字进行以下运算:
* 对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;
* 对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
* 1234567 368782971
* 3695Q8118
* @author DELL
*
*/
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String a=sc.next();
String b=sc.next();
sc.close();
//预处理,自动补0
if(a.length()>b.length()) {
b=addZero(b,a.length()-b.length());
}else if(a.length()<b.length()) {
a=addZero(a,b.length()-a.length());
}
//System.out.println(a);//查看是否自动补齐
//System.out.println(b);
boolean flag=true;//奇数标识
if(a.length()%2==0) {
flag=false;
}
for(int i=0;i<a.length();i++) {
int aa=a.charAt(i)-'0';
int bb=b.charAt(i)-'0';
if(flag) {
System.out.print(dealji(aa,bb));
}else {
System.out.print(dealou(aa,bb));
}
flag=!flag;
}
}
//对于偶数的处理
private static int dealou(int aa, int bb) {
int c=bb-aa;
if(c<0) {
c+=10;
}
return c;
}
//对于奇数的处理
private static char dealji(int aa, int bb) {
int c=(aa+bb)%13;
if(c==10) {
return 'J';
}else if(c==11) {
return 'Q';
}else if(c==12) {
return 'K';
}else {
return (char)(c+'0');
}
}
//自动补齐函数
private static String addZero(String a, int len) {
for(int i=0;i<len;i++) {
a="0"+a;
}
//System.out.println(a);
return a;
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200224114134370.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FuemhpbGFueGlhbw==,size_16,color_FFFFFF,t_70)