ZZULIOJ 1164: 文字列暗号化、Java

ZZULIOJ 1164: 文字列暗号化、Java

質問の説明

文字列 (長さは 100 を超えない) と正の整数 k を入力し、その中の英語の文字を暗号化し、英語以外の文字は変更せずに暗号化された文字列を出力します。暗号化のアイデア: 各文字 c に序数 k を追加します。つまり、それに続く k 番目の文字に置き換えます。変換式は、c=c+k です。文字が z の場合、次の文字は a、つまり、アルファベット文字が円を形成します。

入力

入力の最初の行は多数の文字であり、キャリッジリターンで終わります。入力の 2 行目は整数 k です。k は int の範囲の正の整数です。

出力

暗号化された文字列を出力します。

サンプル入力コピー
12kjsdZjk
280
サンプル出力コピー
12edmxTde
ヒント

ただし、モジュロ演算により k を 26 未満の範囲で制御した場合でも、z + 10 のように char の表現範囲を超えてしまう char 型のオーバーフローの問題を考慮する必要があります。しかし幸いなことに、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();
    }
}

おすすめ

転載: blog.csdn.net/qq_52792570/article/details/132641634