Java数字加密解密:

密码大于0,加密规则:先得到每位数,然后每位数加5,再对10求余,最后将所有数字反转,得到一串新数字//批量操作放到数组里

例如:   1        9        8        3  

+5          6       14     13       8

%10       6         4        3       8

反转       8          3       4        6

import java.util.Scanner;

public class Test24 {
    public static void main(String[] args) {
        //数字加密密码大于0,加密规则:先得到每位数,然后每位数加5,再对10求余,最后将所有数字反转,得到一串新数字//批量操作放到数组里
        //例如:1983:+5变为 6 14 13 8 ;  %10变为 6 4 3 8  ;反转变为 8 3 4 6

        //1.把整数每一位放到数组中
        //①计算数组长度
        Scanner sc=new Scanner(System.in);
        int num=sc.nextInt();
        //定义一个临时变量记录num的值
        int tmp1=num;
        //定义一个变量进行统计
        int count=0;
        while(num!=0){
            num=num/10;
            count++;
        }

        //②定义数组
        int[] arr=new int[count];

        //③把整数每一位放到数组中
        //定义索引
        int index=arr.length-1;
        while(tmp1!=0){
            //获取tmp里面每一位数字
            int ge=tmp1%10;
            //再去掉右边的那位数字
            tmp1 =tmp1/10;
            //把当前获取到的个位添加到数组当中
            arr[index]=ge;
            index--;
        }

        //2.加密
        //每位数+5
        for (int i = 0; i < arr.length; i++) {
            arr[i]= arr[i]+5;

        }
        //%10
        for (int i = 0; i < arr.length; i++) {
            arr[i]=arr[i]%10;
        }
        //反转
        for (int i = 0,j= arr.length-1 ;i < j; i++,j--) {
            int tmp=arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;
        }
        //3.把数组中每一个数进行拼接变成加密之后的结果
        int result=0;
        for (int i = 0; i < arr.length; i++) {
            result=result*10+arr[i];
        }
        System.out.println(result);
    }
}

运行结果:

解密:

import java.util.Scanner;

public class Test25 {
    public static void main(String[] args) {
        //解密:反转-> ???->-5
        //???需要根据+5来看,是有范围的最小5,最大14,所以“???”这里5-9不变,0到4要加10
        //1.定义数组记录加密之后的结果
        Scanner sc=new Scanner(System.in);
        int num=sc.nextInt();
        //定义一个临时变量记录num的值
        int tmp1=num;
        //定义一个变量进行统计
        int count=0;
        while(num!=0){
            num=num/10;
            count++;
        }

        //②定义数组
        int[] arr=new int[count];

        //③把整数每一位放到数组中
        //定义索引
        int index=arr.length-1;
        while(tmp1!=0){
            //获取tmp里面每一位数字
            int ge=tmp1%10;
            //再去掉右边的那位数字
            tmp1 =tmp1/10;
            //把当前获取到的个位添加到数组当中
            arr[index]=ge;
            index--;
        }
        //2.反转
        for (int i = 0,j=arr.length-1; i < j; i++,j--) {
            int tmp=arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;
        }

        //3.由于加密是%10,所以解密0-4之间+10,5-9之间不变
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>=0&&arr[i]<=4){
                arr[i]=arr[i]+10;
            }
        }
        //4.每一位-5
        for (int i = 0; i < arr.length; i++) {
            arr[i]=arr[i]-5;
        }

        //5.获取数组中的每个数字拼成密码
        int result=0;
        for (int i = 0; i < arr.length; i++) {
            result=result*10+arr[i];
        }
        System.out.println(result);
    }
}

运行结果:

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值