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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© AntThinking_toT 高级黑马   /  2014-5-29 20:53  /  1418 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。   

6 个回复

倒序浏览
保手感啊保手感

  1. public class Something
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.             try
  6.             {
  7.                     System.out.println(encryption(4581));
  8.             }
  9.             catch(RuntimeException e)
  10.             {
  11.                     System.out.println(e.getMessage());
  12.             }
  13.     }
  14.    
  15.     private static int encryption(int ori)
  16.     {
  17.             //转字符数组
  18.             char[] chartmp = String.valueOf(ori).toCharArray();
  19.             //抛异常
  20.             if(chartmp.length != 4)
  21.             {
  22.                     throw new RuntimeException("数据不是四位");
  23.             }
  24.             int[] temp = new int[chartmp.length];
  25.             //加5求余
  26.             for ( int i = 0; i < chartmp.length; i++)
  27.             {
  28.                     temp[i] += chartmp[i] - '0';
  29.                     temp[i] += 5;
  30.                     temp[i] %= 10;
  31.                     chartmp [i] = (char) (temp[i] + '0');
  32.             }
  33.             //第一位和第四位交换,第二位和第三位交换即直接反转数字
  34.             String a = new StringBuilder(new String(chartmp)).reverse().toString();
  35.             ori = Integer.parseInt(a);
  36.             return ori;
  37.     }
  38.    
  39. }
复制代码
回复 使用道具 举报
  1. public class EncTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(cipherText(9460));
  6.         }
  7.         /**
  8.          * get ciphertext of plaintext
  9.          */
  10.         private static int cipherText(int plainText){
  11.                 //Processing the number using String
  12.                 StringBuilder sb = new StringBuilder(String.valueOf(plainText));
  13.                 for(int i = 0; i < sb.length(); i++){
  14.                         sb.setCharAt(i,String.valueOf((Integer.parseInt(sb.charAt(i)+"")+5)%10).charAt(0));
  15.                 }
  16.                 //Cache number 4.
  17.                 char temp = sb.charAt(3);
  18.                 //Exchange.
  19.                 sb.setCharAt(3,sb.charAt(0));
  20.                 sb.setCharAt(0,temp);
  21.                 //The same as the below steps.
  22.                 temp = sb.charAt(2);
  23.                 sb.setCharAt(2,sb.charAt(1));
  24.                 sb.setCharAt(1,temp);
  25.                 return Integer.parseInt(sb.toString());
  26.         }
  27. }
复制代码
回复 使用道具 举报

你好专业啊:lol 有异常处理,注释也相当全,向你学习啦。
回复 使用道具 举报

弱弱的问一下,for循环中对chartmp-‘0’;
和第四届又+‘0’是什么作用!
回复 使用道具 举报
yinxjfly 发表于 2014-5-30 20:48
弱弱的问一下,for循环中对chartmp-‘0’;
和第四届又+‘0’是什么作用!

将char型的数字转成int型的数字,强转型的话要ASCII码减去48,即减去'0',反之同理。
回复 使用道具 举报
wangleixhlm 发表于 2014-5-30 21:10
将char型的数字转成int型的数字,强转型的话要ASCII码减去48,即减去'0',反之同理。 ...

同学,你好厉害的,这么厉害怎么为什么还参加黑马呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马