Java练习6

一.题目

复制代码
数字加密与解密
需求:
某系统的数字密码(大于 0),比如 1983,采用加密方式进行传输。
规则如下:
先得到每位数,然后每位数都加上 5,再对 10 求余,最后将所有数字反转,得到一串新数。

二.源码

1.加密

java 复制代码
package TestRuMen;

public class Test6
{
    public static void main(String[] args)
    {
        // 定义一个整数数组,存储原始数字的每一位,这里的 1983 被拆分为 {1, 9, 8, 3}
        int[] arr={1,9,8,3};
        // 遍历数组,对每个元素执行加密的第一步和第二步:加 5 并对 10 求余
        for (int i = 0; i < arr.length; i++)
        {
            // 将当前元素加 5 后对 10 求余,更新数组元素的值
            arr[i]=(arr[i]+5)%10;
        }
        // 使用双指针法反转数组元素,实现加密的第三步
        for (int i = 0, j = arr.length-1; i<j;i++,j--)
        {
            // 借助临时变量 temp 交换 arr[i] 和 arr[j] 的值
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        // 定义一个整数变量,用于存储将数组元素组合后的加密数字
        int number=0;
        // 遍历数组,将数组中的数字组合成一个整数
        for (int i = 0; i < arr.length; i++)
        {
            // 通过乘以 10 并加上当前元素,将数组元素组合成一个整数
            number=number*10+arr[i];
        }
        // 打印加密后的数字
        System.out.println(number);
    }
}

2.把整数的每一位都添加到数组当中

java 复制代码
package TestRuMen;

public class Test7
{
    public static void main(String[] args)
    {
        // 定义一个整数变量,初始值为 12345,这是需要处理的数字
        int number=12345;
        // 定义一个临时变量,用于存储原始数字,避免在后续操作中修改原始数字
        int temp=number;
        // 定义一个计数器,用于记录数字的位数
        int count=0;
        // 循环计算数字的位数,当数字不为 0 时继续循环
        while(number!=0)
        {
            // 将数字除以 10,去掉最低位
            number=number/10;
            // 计数器加 1
            count++;
        }
        // 根据计算得到的数字位数,创建一个对应长度的整数数组
        int[] arr=new int[count];
        // 定义数组的索引,初始值为数组的最后一个位置
        int index=arr.length-1;
        // 循环将数字的每一位提取出来,存储到数组中
        while(temp!=0)
        {
            // 获取数字的最低位
            int ge=temp%10;
            // 将数字除以 10,去掉最低位
            temp=temp/10;
            // 将最低位数字存储到数组的当前索引位置
            arr[index]=ge;
            // 索引减 1,指向前一个位置
            index--;
        }
        // 遍历数组,打印数组中的每一个元素
        for (int i = 0; i < arr.length; i++)
        {
            System.out.print(arr[i]+" ");
        }
    }
}

3.解密

java 复制代码
package TestRuMen;

public class Test8
{
    public static void main(String[] args)
    {
        // 定义一个整数数组,存储加密后的数字密码,这里的 8346 是加密后的结果
        int[] arr={8,3,4,6};

        // 第一步:反转数组元素,还原加密时数字反转的操作
        // 使用双指针法,i 从数组头部开始,j 从数组尾部开始
        for (int i = 0, j = arr.length - 1; i < j; i++, j--)
        {
            // 借助临时变量 temp 交换 arr[i] 和 arr[j] 的值
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

        // 第二步:还原对 10 求余的操作
        // 遍历数组,对于 0 到 4 之间的元素,加上 10 以还原求余前的数值
        for (int i = 0; i < arr.length; i++)
        {
            if (arr[i] >= 0 && arr[i] <= 4)
            {
                arr[i] = arr[i] + 10;
            }
        }

        // 第三步:减去 5,还原每位数加上 5 的操作
        for (int i = 0; i < arr.length; i++)
        {
            arr[i] = arr[i] - 5;
        }

        // 第四步:将数组中的数字组合成一个整数
        int number = 0;
        for (int i = 0; i < arr.length; i++)
        {
            // 通过乘以 10 并加上当前元素,将数组元素组合成一个整数
            number = number * 10 + arr[i];
        }

        // 打印解密后的数字密码
        System.out.println(number);
    }
}
相关推荐
DIY源码阁14 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
wabs66615 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_8769641315 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
basketball61615 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++
嗝o゚16 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
JAVA面经实录91716 小时前
MyBatis面试题库
java·mybatis
小江的记录本16 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
小江的记录本17 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
摇滚侠18 小时前
Java 零基础全套教程,反射机制,笔记 187-188
java·开发语言·笔记
Ulyanov18 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真