题目:
某系统的数字密码(大于0),比如1983。
1. 采用加密方式进行传输
规则是:先得到每一位数字,然后每位数都加5,再对10求余,最后将所有数字反转,得到一串新数。
2. 将上述结果解密
代码:
import java.util.Scanner;
public class IncodeTest{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字密码");
int x = sc.nextInt();
int[] code = getArr(x); //存为数组
System.out.println("存为数组里是");
showArr(code);
int[] incode2 = Incode(code); //编码
System.out.println("编码加密结果是");
showArr(incode2);
//下面语句会将数组重新转化为int型,但是密码的末位是5会被吞
// int incode = arr2Num(incode2);
int[] descode2 = Descode(incode2); //解码
System.out.println("解密结果是");
showArr(descode2);
}
//获取密码长度,注意Math.pow是double类型
private static int getLen(int x){
int len = 0;
while ((int)(x / (Math.pow(10, len))) != 0){
len++;
}
return len;
}
//密码存为数组
private static int[] getArr(int x){
int len = getLen(x); //获取密码长度
int[] code = new int[len];
for (int i = len - 1; i >= 0; i--){
int temp = (int)(x / Math.pow(10, len - i -1));
code[i] = temp % 10;
}
return code;
}
//展示数组
private static void showArr(int[] x){
for (int i = 0; i < x.length; i++){
System.out.print(x[i]);
}
System.out.println();
}
//数组转数字
private static int arr2Num(int[] x){
int y = x[0];
for (int i = 1; i < x.length; i++){
y = y * 10 + x[i];
}
return y;
}
//编码
private static int[] Incode(int[] code){
for (int i = 0; i <code.length; i++){
code[i] = (code[i] + 5) % 10;
}
for (int i = 0, j = code.length - 1; i < j; i++, j--){
int temp = code[i];
code[i] = code[j];
code[j] = temp;
}
return code;
}
//解码
private static int[] Descode(int[] code){
for (int i = 0; i <code.length; i++){
if (code[i] < 5)
code[i] += 10;
code[i] -= 5;
}
for (int i = 0, j = code.length - 1; i < j; i++, j--){
int temp = code[i];
code[i] = code[j];
code[j] = temp;
}
return code;
}
}
试运行:
请输入数字密码
86701237
存为数组里是
86701237
编码加密结果是
28765213
解密结果是
86701237