需求:
某系统的数字密码(大于0) 比如1983,采用加密方式进行传输
规则如下:
每位数加上5
再对10求余
最后将所有数字反转得到一串新数。
加密:
分析:
把整数里面的每一位放到数组中
加密
把数组里面的每一个数字进行拼接,变成加密之后的结果
代码实现:
import java.util.Scanner
public class Test6 {
public static void main(String[] args) {
//键盘录入密码
Scanner sc=new Scanner(System.in);
System.out.println("请输入密码:");
int number = sc.nextInt();
//一.将数字转换到数组中
int temp=number;//number初始值
//1.获取数组长度count
int count=0;
while(number!=0){
//每循环一次就去掉最右边的数字
number=number/10;
//循环一次计数器加一次
count++;
}
//2.将数字存入数组中
//动态分配(定义数组)
int[] arr=new int[count];
for (int i = (count-1); i >=0; i--) {
arr[i]=temp%10;//将个位数字赋给数组
temp=temp/10;//将个位数字删除
}
//二.数组中每项加五
for (int i = 0; i < count; i++) {
arr[i]+=5;
}
//三.每项对10求余
for (int i = 0; i < count; i++) {
arr[i]=arr[i]%10;
}
//四.将所有数字反转
for (int i = 0,j=(count-1); i < j; i++,j--) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
//五.输出
//直接遍历输出数组
for (int i = 0; i < count; i++) {
System.out.print(arr[i]);
}
}
}
结果实例:
难点:
第一步.将一个整数转入数组、
1.利用取余、取模获取和删除最右边的数字
2.定义一个变量作为计数器,删除数字的次数就是数字的位数即需要定义的数组长
解密:
分析:
如图所示,反转加密的过程。
难点:
由于加密是对10取余的方式进行获取的,因此解密的时候需要进行判断,0~4之间加10,5~9之间不变
代码实现:
import java.util.Scanner;
public class Test7 {
public static void main(String[] args) {
//键盘录入加密后的密码
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
int temp=number;
//一.先将数字转入数组中
//1.获取数组长度
int count=0;
while(number!=0){
//每循环一次就去除一个最右边的数字
number=number/10;
//每循环一次,计数器加一
count++;
}
//2.定义数组
int[] arr=new int[count];
//
for (int i = (count-1); i >=0 ; i--) {
arr[i]=temp%10;//将个位数字赋给数组
temp=temp/10;//将个位数字删除
}
//二.反转
for (int i = 0,j=(count-1); i < j ; i++,j--) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
//三.由于加密是对10取余的方式进行获取的,因此解密的时候需要进行判断,0~4之间加10,5~9之间不变
for (int i = 0; i < count; i++) {
if(arr[i]>=0&&arr[i]<=4){
arr[i]+=10;
}
}
//四.每位减5
for (int i = 0; i < count; i++) {
arr[i]-=5;
}
//五.输出
for (int i = 0; i < count; i++) {
System.out.print(arr[i]);
}
}
}