1048. 数字加密(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。
输入格式:
输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:1234567 368782971输出样例:
3695Q8118
/*
* 题目中数据录入说* 均为不超过100位的正整数,意思就是拿字符串切割化成数值做
* 这里令个位为第1位。
* 意思就是是求出来那个加密字符串倒序输出,
* 当A长度!=B长度的时候
* 要将较短的那个数前补0; 这个是最核心的。。。。读题一开始没读懂
*
* 部分正确 5分 0 4 5测试点错误
*/
import java.util.Scanner;
public class num1048 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String A=input.next();
String B=input.next();
// String A="1234567";
// String B="368782971";
String result="";
while (B.length()>A.length()) {
if (A.length()<B.length()) {
A=0+A;
}else {
B=0+B;
}
}
// System.out.println(A);
// System.out.println(B);
for (int i = 0; i < B.length(); i++) {
if ((i&1)==0) {
int key=(Integer.parseInt(A.charAt(i)+"")+Integer.parseInt(B.charAt(i)+""))%13;
//倒序累加 改成result+=key不行,这里不太清楚
result=ji(key)+result;
}else {
int key=(Integer.parseInt(B.charAt(i)+"")-Integer.parseInt(A.charAt(i)+""));
key=key<0?key+=10:key;
result=key+result;
}
}
char [] result_c=result.toCharArray();
for (int i = result_c.length-1; i >=0 ; i--) {
System.out.print(result_c[i]);
}
System.out.println();
}
public static String ji(int key){
String str="";
if (key<10) {
return key+str;
}else {
switch (key) {
case 10:
str="J";
break;
case 11:
str="Q";
break;
case 12:
str="K";
break;
}
return str;
}
}
}