IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 一个有关数据加密的小练习题。 -> 正文阅读

[大数据]一个有关数据加密的小练习题。

数据加密问题
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
然后,把加密后的结果在控制台打印出来。

思路一:
先将要进行加密的数字给写死,初始值给定,然后取到每个数据,再进行一步一步的操作:

题目要求:
1、数据是小于8位的整数
int num = 123456
2、加密的规则:
1)首先将数据倒叙
654321
2)然后将每位数字都加上5,再用和除以10的余数代替该数字
109876
3)最后将第一位和最后一位数字交换
609871
3、最后将加密后的结果输出在控制台

通过分析后,我们发现如果将输入的整数数据放到一维数组中再进行 加密规则就很方便。
int[] arr ={1,2,3,4,5,6}
问题就是,如何将我们控制台输入的整数变成数组存储呢?
1、控制台输入数据
int num = 123456;
2、定义一个数组存储数据,问题来了,数组的长度是多少呢?
int[] arr = new int[8];//长度是小于8的,所以不可能到达8或者是大于8
在赋值的时候,我们通过一个变量记录索引的变化
严格按照我们输入的整数数据的顺序存放在数组中
int index = 0;
3、如何获取到每一个数组元素的值呢?
int gewei = num%10 //6
int shiwei = num/10%10 //5
int baiwei = num/10/10%10 //4

arr[index] = gewei;
index++;
arr[index] = shiwei;
index++;
arr[index] = baiwei;

代码如下:

public class ShuJuJiaMiDemo1 {
    public static void main(String[] args) {
        //定义一个数据
        int num = 123456;

        //定义一个数组
        int[] arr = new int[8];
        //把数据上的每一位数字按照顺序放到数组中
        //由于,我们已经获取到了每一个数字了,所以我们干脆直接逆序赋值
        /*
        int index = 0;
        arr[index] = num%10;
        index++;
        arr[index] = num/10%10;
        index++;
        arr[index] = num/10/10%10;
        index++;
        arr[index] = num/10/10/10%10;
        index++;
        arr[index] = num/10/10/10/10%10;
        index++;
        arr[index] = num/10/10/10/10/10%10;
        */

        //用while循环改进,由于今后我们会手动输入整数,不确定长度
        int index = 0;
        while (num > 0){
            arr[index] = num%10;
            index++;
            num = num/10;
        }


        //将每位数字都加上5,再用和除以10的余数代替该数字
        //由于我们在给数组赋值的时候,循环结束的条件是num > 0,index的变化只变化到数据的长度对应的索引+1
        for(int i = 0;i<index;i++){
            arr[i]+=5;
            arr[i]%=10;
        }

        //最后将第一位和最后一位数字交换
        int tmp = arr[0];
        arr[0]=arr[index-1];
        arr[index-1] = tmp;


        System.out.println("123456加密后的数据是:");
        System.out.println();
        for (int i =0;i<index;i++){
            System.out.print(arr[i]);
        }


    }
}

思路二:
使用Scanner输入一串小于八位的整数,通过一个循环来判断输入数字的位数,再根据输入数字的位数来创建数组,再通过数组一步一步做下面的要求。
代码如下:

import java.util.Scanner;
public class ShuJuJiaMiDemo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个小于八位的整数");
        int x = sc.nextInt();
        int index = 0;
        boolean flag = true;
        while(flag){
            if(x/10!=0){
                x /= 10;
                index ++;
            }else{
                flag = false;
            }
        }
        System.out.println("你输入了"+(index+1)+"位的数据");

        //开辟一个长度为你输入位数的数组
        int [] arr = new int[index+1];

        System.out.println("再次输入一遍你的数字:");
        x = 0;
        x = sc.nextInt();

        //将你输入的数字存入数组
        for(int i=0;i<(index+1);i++){
            if(x == 0){
                break;
            }
            arr[i] = x%10;
            x = x/10;
        }

        System.out.println("**************这是逆序之后的结果***********************");
        //这是逆序之后的数组
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");
        }
        System.out.println();

        for(int i=0;i<arr.length;i++){
            arr[i] += 5;
            arr[i] %= 10;
        }

        System.out.println("*************这是每位数字都加上5,再用和除以10的余数代替该数字的结果*******************");
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");
        }
        System.out.println();

        int temp = 0;
        temp = arr[index];
        arr[index] = arr[0];
        arr[0] = temp;

        System.out.println("**************这是第一位数字和最后一位数字进行交换***************");

        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");
        }
        System.out.println();


    }
}

在这里插入图片描述

思路三:
同样通过控制台手动录入加密进行改进,再将加密规则用方法封装,不过这里的数组是之间创建好的,就是最大位数:8.
代码如下:

/*
        用控制台手动录入加密改进,再将加密规则用方法封装

        00000000
 */
import java.util.Scanner;
public class ShuJuJiaMiDemo2 {
    public static void main(String[] args) {
        //创建Scanner对象
        Scanner sc = new Scanner(System.in);

        boolean flag = true;

        while (flag){
            System.out.println("请输入要加密的整数数据:(小于8位)");
            int num = sc.nextInt();
            if(num>9999999){
                System.out.println("输入数据有误,请重新输入");
            }else {
                //执行加密规则
                jiaMi(num,num);

                flag = false;
            }
        }
    }


    //1、返回值 void
    //2、参数列表  int
    public static void jiaMi(int x,int x1){
        //定义一个数组
        int[] arr = new int[8];
        //把数据上的每一位数字按照顺序放到数组中
        //由于,我们已经获取到了每一个数字了,所以我们干脆直接逆序赋值
        /*
        int index = 0;
        arr[index] = num%10;
        index++;
        arr[index] = num/10%10;
        index++;
        arr[index] = num/10/10%10;
        index++;
        arr[index] = num/10/10/10%10;
        index++;
        arr[index] = num/10/10/10/10%10;
        index++;
        arr[index] = num/10/10/10/10/10%10;
        */

        //用while循环改进,由于今后我们会手动输入整数,不确定长度
        int index = 0;
        while (x > 0){
            arr[index] = x%10;
            index++;
            x = x/10;
        }


        //将每位数字都加上5,再用和除以10的余数代替该数字
        //由于我们在给数组赋值的时候,循环结束的条件是num > 0,index的变化只变化到数据的长度对应的索引+1
        for(int i = 0;i<index;i++){
            arr[i]+=5;
            arr[i]%=10;
        }

        //最后将第一位和最后一位数字交换
        int tmp = arr[0];
        arr[0]=arr[index-1];
        arr[index-1] = tmp;


        System.out.println(x1+"加密后的数据是:");
        System.out.println();
        for (int i =0;i<index;i++){
            System.out.print(arr[i]);
        }
    }
}

感谢阅读,我是啊帅和和,一位大数据专业即将大四学生,祝你快乐。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:53:02  更:2021-07-28 07:53:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 21:41:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码