A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


数据加密(思考题)
这个题综合程度较高,不会没关系,但是一定要先思考下,看看自己能想到哪些内容。最后我讲的时候听懂就行了。
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。
请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。

例如:
int number = 123456;
/*
654321
10 9876
609871  
*/

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

10 个回复

正序浏览
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                 System.out.println(Arrays.toString(getNums(4758392)));
  3.         }
  4.         public static int[] getNums(int num){
  5.                 int length=String.valueOf(num).length();
  6.                 int arr[]=new int[length];
  7.                 for(int i=0,temp=0;num>0;i++){
  8.                         if((temp=num%10)>5)
  9.                                 arr[i]=temp-5;//大于5的数+5再%10实现相当于他本身-5
  10.                         else arr[i]=temp+5;//小于的就是他本身+5了.
  11.                         num/=10;
  12.                 }
  13.                 System.out.println(Arrays.toString(arr));//加上测试语句
  14.                 arr[0]=arr[length-1]+(arr[length-1]=arr[0])*0;
  15.                 return arr;
  16.         }
复制代码
这个简单些.扩展下你的思路吧.
回复 使用道具 举报
版主代理郑重提示:如果楼主问题已经解决那么。在自己发表的帖子下面,点“修改”,
然后把主题的分类标记成“已解决”。就OK了{:soso_e102:}
回复 使用道具 举报
整合了一川的后半部分
  1. public class encryption{
  2.         public static void main(String args[]) {
  3.                 getNumber(1234567);
  4.         }

  5.         public static void getNumber(int number) {
  6.                 int a = number / 1000000;
  7.                 int b = number % 1000000 / 100000;
  8.                 int c = number % 100000 / 10000;
  9.                 int d = number % 10000 / 1000;
  10.                 int e = number % 1000 / 100;
  11.                 int f = number % 100 / 10;
  12.                 int g = number % 10;
  13.                 int arr[] = new int[] { a, b, c, d, e, f, g };//搞出来的存到数组里
  14.                 EncryptData(arr);//倒序,加5 取模10 第1和最后一个换位
  15.                 PrintArray(arr);//遍历数组
  16.         }

  17.         public static void EncryptData(int[] arr) {
  18.                 for (int i = 0; i < arr.length / 2; i++) {

  19.                         int temp;

  20.                         temp = arr[i];

  21.                         arr[i] = arr[arr.length - 1 - i];

  22.                         arr[arr.length - 1 - i] = temp;

  23.                 }
  24.                 for (int i = 0; i < arr.length; i++) {

  25.                         arr[i] = (arr[i] + 5) % 10;// 每位数加5,后模10

  26.                 }

  27.                 int temp;

  28.                 temp = arr[0];

  29.                 arr[0] = arr[arr.length - 1];

  30.                 arr[arr.length - 1] = temp;// // 第一位和最后一位互换

  31.         }

  32.         public static void PrintArray(int[] arr) {

  33.                 for (int i = 0; i < arr.length; i++) {

  34.                         System.out.print(arr[i] + " ");

  35.                 }

  36.                 System.out.println();

  37.         }

  38. }
复制代码
回复 使用道具 举报
加油  朋友们!
回复 使用道具 举报
  1. class a{
  2.         public static void main(String args[]){
  3.                     //int[] arr = new int[8];
  4.                     int[] arr = {1, 2, 3,4, 5, 6};
  5.                     PrintArray(arr);
  6.                     EncryptData(arr);
  7.                     PrintArray(arr);
  8.         }
  9.         //打印数组
  10.         public static void PrintArray(int[] arr){
  11.                 for(int i = 0; i < arr.length; i++){
  12.                         System.out.print(arr[i]+" ");
  13.                         }
  14.                 System.out.println();
  15.                 }
  16.                
  17.         public static void EncryptData(int[] arr){
  18.                 //倒叙
  19.                 for(int i = 0; i < arr.length/2; i++){
  20.                         int temp;
  21.                         temp = arr[i];
  22.                         arr[i] = arr[arr.length - 1 - i];
  23.                         arr[arr.length - 1 - i] = temp;
  24.                         }
  25.                        
  26.                 //每位数加5,后模10
  27.                 for(int i = 0; i < arr.length; i++){
  28.                         arr[i] = (arr[i] + 5) % 10;
  29.                         }
  30.                        
  31.                 //第一位和最后一位互换
  32.                 int temp;
  33.                 temp = arr[0];
  34.                 arr[0] = arr[arr.length - 1];
  35.                 arr[arr.length - 1] = temp;
  36.                 }
  37. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
1,先求出数的位数
2.再分别把每一位数分离出来放到数组中。
3.再把数组中的数反转
4.用for循环遍历...遍历的过程中进行加5 和%10的运算.并且完后存进新的数组
5.循环结束后.将头角标和尾角标互换
6.最后把数组输出来。
其实思路和楼上的差不多。。。。。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 尹丽峰 于 2013-4-26 00:05 编辑

个十百千万取出来,然后逐个进行加5 sum在除以10
  1. public class encryption{
  2. public static void main(String args[]) {
  3. getNumber(1234567);
  4. }

  5. public static void getNumber(int number) {
  6. int a = number / 1000000;
  7. int b = number % 1000000 / 100000;
  8. int c = number % 100000 / 10000;
  9. int d = number % 10000 / 1000;
  10. int e = number % 1000 / 100;
  11. int f = number % 100 / 10;
  12. int g = number % 10;
  13. int arr[] = new int[] { a, b, c, d, e, f, g };//搞出来的存到数组里
  14. EncryptData(arr);//倒序,加5 取模10 第1和最后一个换位
  15. PrintArray(arr);//遍历数组
  16. }

  17. public static void EncryptData(int[] arr) {
  18. for (int i = 0; i < arr.length / 2; i++) {

  19. int temp;

  20. temp = arr[i];

  21. arr[i] = arr[arr.length - 1 - i];

  22. arr[arr.length - 1 - i] = temp;

  23. }
  24. for (int i = 0; i < arr.length; i++) {

  25. arr[i] = (arr[i] + 5) % 10;// 每位数加5,后模10

  26. }

  27. int temp;

  28. temp = arr[0];

  29. arr[0] = arr[arr.length - 1];

  30. arr[arr.length - 1] = temp;// // 第一位和最后一位互换

  31. }

  32. public static void PrintArray(int[] arr) {

  33. for (int i = 0; i < arr.length; i++) {

  34. System.out.print(arr[i] + " ");

  35. }

  36. System.out.println();

  37. }

  38. }
复制代码
回复 使用道具 举报
不知道你学到哪里了...
我的思路是
1.定义一个函数.把数组穿进去
2.在函数内从新定义一个数组
3.在函数把函数反转
4.用for循环遍历...遍历的过程中进行加5 和%10的运算.并且完后存进新的数组
5.循环结束后.将头角标和尾角标互换....然后
6.返回到主函数.



我的思路是这样的.....代码嘛...有的忘记了.要先看资料的..但是我说过的方法都有.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
这是老师留给我们的思考题.想了很久都没有一点思路,有没有大神会的啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马