加密:将一串数字先得到它的每一位数,然后将每一位加上5,再对10取余数,最后将所有数字反转,得到加密后的结果。
解密:将加密后的数字还原为原来的数字,由于还原的过程中需要用到对10取余数时的商,所以对10取余时候的商也要知道。
package Practices;
import java.util.Scanner;
public class PwdData {
public static void main(String[] args) {
//数字加密
//某系统的数字密码:比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上
//5,再对10求余,最后将所有数字反转,得到一串新数。
Scanner sc = new Scanner(System.in);
System.out.print("请输入加密的数字:");
int pwd = sc.nextInt();
System.out.println("加密后的数字为:" + jiami(pwd));
System.out.print("商为:[");
int[] number = shang(pwd);
for (int i = 0; i < number.length; i++)
System.out.print(i==number.length-1 ? number[i] : number[i] + ",");//三元运算符
System.out.println("]");
System.out.println("解密后的数字为:" + jiemi(jiami(pwd),shang(pwd)));
}
public static int jiami(int pwd){
int count = 1;
int rs = 0;
int n = pwd;
while(pwd/10!=0) {
count++;
pwd /= 10;
}
int[] arr = new int[count];
for (int i = 0; i < count; i++) {
if (n != 0) {
arr[i] = n % 10;
n = n / 10;
}
}
for (int j = 0; j < arr.length; j++) {
arr[j] += 5;
arr[j] %= 10;
rs += arr[j]*Math.pow(10,count-1);
count--;
}return rs;
}
public static int[] shang(int pwd){
int count = 1;
int rs = 0;
int n = pwd;
while(pwd/10!=0) {
count++;
pwd /= 10;
}
int[] arr = new int[count];
for (int i = 0; i < count; i++) {
if (n != 0) {
arr[i] = n % 10;
n = n / 10;
}
}
for (int j = 0; j < arr.length; j++) {
arr[j] += 5;
arr[j] /= 10;
}
return arr;
}
public static int jiemi(int pwd,int[] a){
int count = 1;
int rs = 0;
int n = pwd;
while(pwd/10!=0) {
count++;
pwd /= 10;
}
int[] arr = new int[count];
for (int i = 0; i < count; i++) {
if (n != 0) {
arr[i] = n % 10;
n = n / 10;
}
}
for (int j = 0; j < arr.length; j++) {
arr[j] += a[j] * 10;
arr[j] -= 5;
rs += arr[j]*Math.pow(10,count-1);
count--;
}return rs;
}
}
运行结果如下所示:
实例一:
实例二: