a009. 解碼器
這題是很經典的凱薩密碼
,說穿了就是字的位移,舉例來說A這個字往後移兩格變成C,CAT就會變成ECV。
要解題首先要知道字元移位之後會變成哪個字元,幸好有個東西叫做ASCII碼,負責將數字對應到特定字元,例如小寫a是十進位的97。
又剛好英文字母表在ASCII中是有順序的排列的,也就是說a = 97, b = 98, c = 99......
所以將使用者輸入的字元轉換成數字之後就能夠簡單的進行移位。
那在Java中要如何把字元char轉換成整數int呢?用華麗的強制型態轉換就OK了!在char變數面前加上一個(int)就會變成整數,順帶一提Java中的字元是以Unicode(萬國碼)儲存的。
經過用眼睛觀察法發現,題目中的明文(原文)和密文(加密過後的暗號)之間差了7個字元,明文 - 7 = 密文
程式碼如下:
import java.util.Scanner; public class Pa009{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()){ char[] line = scanner.nextLine().toCharArray(); //nextLine可以讀取一行,型態是String,String可以用toCharArray方法轉成字元陣列 for(char ch: line){ //for-each,詳見https://openhome.cc/Gossip/JavaEssence/Foreach.html System.out.print((char)((int)ch - 7)); } System.out.println(); } } }參考:http://mm.tlrc.mcu.edu.tw/courses/fhwang/accredit/JAVA/char.html
沒有留言:
張貼留言