五十道程式設計小題目 --- 48 java
阿新 • • 發佈:2019-01-11
【程式48】
題目:某個公司採用公用電話傳遞資料,資料是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字
題目:某個公司採用公用電話傳遞資料,資料是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字
都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。
輸出結果:import java.util.HashMap; public class Test48 { /**加密 * :每位數字 都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。 * @param args */ private static int encryption(int code){ StringBuilder sb = new StringBuilder(); int[] arr = new int[4]; arr[0] = code%10; // 個位 arr[1] = code/10%10;//十位 arr[2] = code/100%10;//百位 arr[3] = code/1000; //千位 for(int i=0; i<arr.length; i++){ int tmp = arr[i]+5; arr[i] = tmp%10; sb.insert(0, arr[i]); } swap(arr, 0, 3); swap(arr, 1, 2); // print(arr); return Integer.parseInt(sb.toString()); } /* * 解密 */ private static int decryption(int code){ StringBuilder sb = new StringBuilder(); int[] arr = new int[4]; HashMap<Integer, Integer > map = new HashMap<Integer, Integer>(); for(int i=5,j=0; i<=14 ; i++,j++){ //解密 int tmp = i%10; map.put(tmp, j); } arr[0] = code%10; // 個位 arr[1] = code/10%10;//十位 arr[2] = code/100%10;//百位 arr[3] = code/1000; //千位 for(int i=0; i<arr.length; i++){ arr[i] = map.get(arr[i]); sb.insert(0, arr[i]); } swap(arr, 0, 3); swap(arr, 1, 2); return Integer.parseInt(sb.toString()); } public static void main(String[] args) { System.out.println("原數為:2354"); System.out.println("加密後:" + encryption(2354)); int code = encryption(2354); System.out.println("解密後:" + decryption(code)); } // 交換陣列元素 private static void swap(int[] arr, int i, int j) { if (i == j) { return; } arr[i] = arr[i] + arr[j]; arr[j] = arr[i] - arr[j]; arr[i] = arr[i] - arr[j]; } // 列印陣列 public static void print(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); } }
原數為:2354
加密後:7809
解密後:2354