機械設(shè)備網(wǎng)優(yōu)化內(nèi)容
ZZULIOJ 1164: 字符串加密,Java
題目描述
輸入一串字符(長度不超過100)和一個正整數(shù)k,將其中的英文字母加密并輸出加密后的字符串,非英文字母不變。加密思想:將每個字母c加一個序數(shù)k,即用它后面的第k個字母代替,變換公式:c=c+k。如果字母為z,則后一個字母是a,也就是字母字符形成一個圓。
輸入
輸入第一行是若干字符,以回車結(jié)束。輸入第二行是一個整數(shù)k,k是int范圍內(nèi)的正整數(shù);
輸出
輸出加密后的字符串。
樣例輸入 Copy
12kjsdZjk
280
樣例輸出 Copy
12edmxTde
提示
注意,即使通過模運算把k控制在小于26的范圍內(nèi),依然要考慮char類型溢出的問題,如’z’ + 10也會超出char的表示范圍。但慶幸的是,我們只需要考慮向內(nèi)存存儲時的char類型溢出,而在計算過程中不會溢出,因為計算過程中char會被提升為int類型。
import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));char[] a = bf.readLine().toCharArray();int k = Integer.parseInt(bf.readLine());for (int i = 0; i < a.length; i++) {if (a[i] >= 'a' && a[i] <= 'z') {a[i] = (char) ((a[i] - 'a' + k) % 26 + 'a');}if (a[i] >= 'A' && a[i] <= 'Z') {a[i] = (char) ((a[i] - 'A' + k) % 26 + 'A');}}bw.write(a);bw.close();}
}