题解 | #字符串加解密#
字符串加解密
https://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a
有点像凯撒密码,移位+取模,但是需要分类讨论。
值得注意的是:对于减法取模,为了保证不是负数,要记得加上模数后取模。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
char[] plain = in.next().toCharArray();
char[] cipher = in.next().toCharArray();
for (int i = 0; i < plain.length; i++) {
char ch = plain[i];
if (Character.isLetterOrDigit(ch)) {
if (Character.isLetter(ch)) {
if (Character.isLowerCase(ch)) {
// a-z
ch = Character.toTitleCase((char) (((ch - 'a') + 1) % 26 + 'a'));
} else {
// A-Z
ch = Character.toLowerCase((char) (((ch - 'A') + 1) % 26 + 'A'));
}
} else {
// 0-9
ch = (char) (((ch - '0') + 1) % 10 + '0');
}
plain[i] = ch;
}
}
System.out.println(String.valueOf(plain));
for (int i = 0; i < cipher.length; i++) {
char ch = cipher[i];
if (Character.isLetterOrDigit(ch)) {
if (Character.isLetter(ch)) {
if (Character.isLowerCase(ch)) {
// a-z
ch = Character.toTitleCase((char) (((ch - 'a') + 26 - 1) % 26 + 'a'));
} else {
// A-Z
ch = Character.toLowerCase((char) (((ch - 'A') + 26 - 1) % 26 + 'A'));
}
} else {
// 0-9
ch = (char) (((ch - '0') + 10 - 1) % 10 + '0');
}
cipher[i] = ch;
}
}
System.out.println(String.valueOf(cipher));
}
}
}
查看2道真题和解析