機(jī)械設(shè)備網(wǎng)優(yōu)化內(nèi)容
ZZULIOJ 1164: 字符串加密,Java
題目描述
輸入一串字符(長(zhǎng)度不超過(guò)100)和一個(gè)正整數(shù)k,將其中的英文字母加密并輸出加密后的字符串,非英文字母不變。加密思想:將每個(gè)字母c加一個(gè)序數(shù)k,即用它后面的第k個(gè)字母代替,變換公式:c=c+k。如果字母為z,則后一個(gè)字母是a,也就是字母字符形成一個(gè)圓。
輸入
輸入第一行是若干字符,以回車(chē)結(jié)束。輸入第二行是一個(gè)整數(shù)k,k是int范圍內(nèi)的正整數(shù);
輸出
輸出加密后的字符串。
樣例輸入 Copy
12kjsdZjk
280
樣例輸出 Copy
12edmxTde
提示
注意,即使通過(guò)模運(yùn)算把k控制在小于26的范圍內(nèi),依然要考慮char類型溢出的問(wèn)題,如’z’ + 10也會(huì)超出char的表示范圍。但慶幸的是,我們只需要考慮向內(nèi)存存儲(chǔ)時(shí)的char類型溢出,而在計(jì)算過(guò)程中不會(huì)溢出,因?yàn)橛?jì)算過(guò)程中char會(huì)被提升為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();}
}