PAT (Basic Level) Practise (中文) 1048. 数字加密(20)

1048. 数字加密(20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

输入格式:

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

输出格式:

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

输入样例:
1234567 368782971
输出样例:
3695Q8118

/*

 * 题目中数据录入说
 * 均为不超过100位的正整数,意思就是拿字符串切割化成数值做
 * 这里令个位为第1位。
 * 意思就是是求出来那个加密字符串倒序输出,
 * 当A长度!=B长度的时候
 * 要将较短的那个数前补0; 这个是最核心的。。。。读题一开始没读懂
 *
 * 部分正确 5分 0 4 5测试点错误
 */
import java.util.Scanner;


public class num1048 {

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String A=input.next();
        String B=input.next();
//        String A="1234567";
//        String B="368782971";
        String result="";
        while (B.length()>A.length()) {
            if (A.length()<B.length()) {
                A=0+A;
            }else {
                B=0+B;
            }            
        }
//        System.out.println(A);
//        System.out.println(B);
        for (int i = 0; i < B.length(); i++) {
            if ((i&1)==0) {
                int key=(Integer.parseInt(A.charAt(i)+"")+Integer.parseInt(B.charAt(i)+""))%13;
                //倒序累加   改成result+=key不行,这里不太清楚
                result=ji(key)+result;                
            }else {
                int key=(Integer.parseInt(B.charAt(i)+"")-Integer.parseInt(A.charAt(i)+""));
                key=key<0?key+=10:key;
                result=key+result;
            }
        }
        char [] result_c=result.toCharArray();
        for (int i = result_c.length-1; i >=0 ; i--) {
            System.out.print(result_c[i]);
        }
        System.out.println();

    }
    public static String ji(int key){
        String str="";
        if (key<10) {
            return key+str;
        }else {
            switch (key) {
            case 10:
                str="J";
                break;
            case 11:
                str="Q";
                break;
            case 12:
                str="K";
                break;
            }
            
            return str;
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值