问题描述:某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密。加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。
最终代码如下(详细的需求分析、编码实现过程)
/*
1、问题描述:
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密。
加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。
2、获取需求:
实现将用户输入的小于8位正整数字,按照给定的规则加密,并打印出来
3、分析:
(1)获取给定的不小于8位的整数
(2)分析主要规定的规则:
a、原始数据倒序
b、将每一个数字加上5
c、和与10取余代替当前数字
d、首尾数字交换
(3)将所得加密后的数字打印
4、实现:
数据结构:采用一维数组,长度为8
规则实现:
a、原始数据倒序
拆数:获取各个位置上的数字
拆数过程中从个位数字开始获取,存储从数组的0索引开始,
已经实现了数组的逆置
逆置数组(reverse函数)
b、将每一个数字加上5
一维数组的遍历:for循环
num += 5;
c、和与10取余代替当前数字
num %= 10;
d、首尾数字交换
实现正整数交换的四种方式
(1)中间变量temp
(2)不借助中间变量(+)
(3)使用按位异或的特点:
某一数据和同一数据异或两次,数据本身不变
(4)一句话实现:
b = (a+b) -(a=b); 可读性很差且代码不规范
5、编码
*/
import java.util.Scanner;
public class JiaMiDemo
{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入原始数据:");
// 1、获取原始数据
int data = sc.nextInt();
/*
// 2、定义数据结构:一维数组
int[] dataArray = new int[8];
int count = 0; // 记录索引位置(数组的实际长度)
// 3、原始数据倒序
// 拆数:获取各个位置上的数字
// 拆数过程中从个位数字开始获取,存储从数组的0索引开始,
// 已经实现了数组的逆置
// 逆置数组(reverse函数)
while(data!=0)
{
dataArray[count] = data % 10;
count ++;
data /= 10;
}
*/
// 拆数函数实现2、3
int[] dataArray = chaiShu(data);
// 获取数组的实际长度
int count = dataArray[8];
/* 4、将每一个数字加上5
一维数组的遍历:for循环
5、和与10取余代替当前数字
*/
for(int i=0;i<count;i++)
{
dataArray[i] += 5;
dataArray[i] %= 10;
}
// 6、首尾数字交换
int temp = dataArray[0];
dataArray[0] = dataArray[count-1];
dataArray[count-1] = temp;
// 7、实现加密数据的输出
String jiami="";
for (int i=0;i<count;i++)
{
jiami += dataArray[i];
}
System.out.println("加密后的数据是:\n"+ jiami);
}
/* 拆数函数:获取各个位置上的数字
拆数过程中从个位数字开始获取,存储从数组的0索引开始,
已经实现了数组的逆置
*/
public static int[] chaiShu(int num)
{
int[] arr = new int[9];
int index = 0;
while(num!=0)
{
arr[index++]=num%10;
num/=10;
}
// 最后一位存储数组的实际长度
arr[8] = index;
return arr;
}
}