首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 陣列模擬加密:四位數字位移與交換演算法

     編輯:Java 程式設計入門

一、題目需求

輸入四位整數,加密規則:

  1. 每位數字 +5。
  2. 取模 10 替換原數字。
  3. 交換位置:第 1 位 ↔ 第 4 位,第 2 位 ↔ 第 3 位。
  4. 輸出加密後四位數。

二、非陣列版(硬編碼各位)

int n = scanner.nextInt(); // 假設已驗證 1000-9999
int d1 = n / 1000;
int d2 = n / 100 % 10;
int d3 = n / 10 % 10;
int d4 = n % 10;

d1 = (d1 + 5) % 10;
d2 = (d2 + 5) % 10;
d3 = (d3 + 5) % 10;
d4 = (d4 + 5) % 10;

int encrypted = d4 * 1000 + d3 * 100 + d2 * 10 + d1;
System.out.println(encrypted);

缺點:位數固定,擴充至 5/6 位需大量複製修改程式碼。

三、陣列版(通用 N 位數)

public static int encrypt(int number, int digits) {
    int[] arr = new int[digits];
    // 1. 從低位到高位拆解存入陣列
    for (int i = 0; i < digits; i++) {
        arr[i] = number % 10;
        number /= 10;
    }
    // 2. 位移 +5 %10
    for (int i = 0; i < digits; i++) {
        arr[i] = (arr[i] + 5) % 10;
    }
    // 3. 交換對稱位置 (i <-> digits-1-i)
    for (int i = 0; i < digits / 2; i++) {
        int tmp = arr[i];
        arr[i] = arr[digits - 1 - i];
        arr[digits - 1 - i] = tmp;
    }
    // 4. 重組數字
    int result = 0;
    for (int i = digits - 1; i >= 0; i--) {
        result = result * 10 + arr[i];
    }
    return result;
}

// 測試
System.out.println(encrypt(1234, 4)); // 輸出加密結果
System.out.println(encrypt(12345, 5)); // 直接支援 5 位

四、關鍵點解析

步驟陣列索引對應說明
拆解arr[0] = 個位, arr[1] = 十位...自然對應取模/除法順序
位移同索引獨立運算,無相依
交換i ↔ len-1-i雙指標對稱交換,通用奇/偶長度
重組高位到低位累乘 10還原十進制數值

五、擴展:解密演算法

加密可逆,解密步驟反向:

  1. 重組 → 陣列。
  2. 交換回原位 (對稱交換再做一次)。
  3. 逆向位移:(digit + 10 - 5) % 10 即 (digit + 5) % 10 (因 10-5=5,自逆)。
  4. 合併數字。

發現:此加密自逆,加密兩次即還原,因 (x+5)%10 為自逆函數,交換兩次也還原。

六、總結

  1. 陣列將固定位數硬編碼轉為參數化迴圈,大幅提升擴充性。
  2. 對稱交換、位移運算皆為 O(N),極高效。
  3. 自逆特性簡化解密實作,適合教學示範對稱加密基本概念。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved