PAT (Basic Level) Practice (中文)1048 数字加密 (20 分)(Java实现)

题目描述:

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118

百度了一下,才知道坑,参考参考思路

代码示例(Java实现)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        char[] cs = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K'};
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        String num = cin.readLine();
        String num1 = num.split(" ")[0];
        String num2 = num.split(" ")[1];
        StringBuilder result = new StringBuilder();
        // 这题比较坑的就是,本以为 B 的长度小于 A 的长度,只需要处理 B 的长度的数字就可以了
        // 后来查阅别人的,才发现需要将 B 前面补 0 到跟 A 的长度一样
        StringBuilder num2Builder = new StringBuilder(num2);
        for (int i = 0; i < num1.length() - num2.length(); i++) {
            num2Builder.insert(0, "0");
        }
        num2 = num2Builder.toString();
        for (int i = 0; i < Math.min(num1.length(), num2.length()); i++) {
            // 取出 num1 的后一位
            int n1 = num1.charAt(num1.length() - i - 1) - '0';
            int n2 = num2.charAt(num2.length() - i - 1) - '0';
            // 奇数位
            if (i % 2 == 0) {
                result.insert(0, cs[(n1 + n2) % 13]);
            } else {
                int sum = n2 - n1;
                if (sum < 0) {
                    sum += 10;
                }
                result.insert(0, sum);
            }
        }
        // 如果 B 的长度大于 A 的长度,要把 B 比 A 长的那几个数字给取出来
        if (num1.length() < num2.length()) {
            int temp = num2.length() - num1.length();
            result.insert(0, num2.substring(0, temp));
        }
        // // 统计一下开头的 0 的个数(本以为计算结果的前面的 0 要给去掉,后面测试发现不需要)
        // int index = 0;
        // if (result.charAt(0) == '0') {
        //     while (index < result.length() && result.charAt(index) == '0') {
        //         index++;
        //     }
        // }

        System.out.println(result.toString());
    }

}
发布了80 篇原创文章 · 获赞 13 · 访问量 9273

猜你喜欢

转载自blog.csdn.net/qq_39424178/article/details/96847420