PAT1048數字加密(java實現)

TNTZS666發表於2019-01-20

題目描述:

本題要求實現一種數字加密方法。首先固定一個加密用正整數 A,對任一正整數 B,將其每 1 位數字與 A 的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對 13 取餘——這裡用 J 代表 10、Q 代表 11、K 代表 12;對偶數位,用 B 的數字減去 A 的數字,若結果為負數,則再加 10。這裡令個位為第 1 位。

  • 輸入格式
    輸入在一行中依次給出 A 和 B,均為不超過 100 位的正整數,其間以空格分隔。

  • 輸出格式
    在一行中輸出加密後的結果。


解題思路:這道題主要技巧就是想到把短的那串數字用0去補充,這樣輸出的時候就能直接一個for迴圈搞定了。並且題目需要是不超過100位正整數,所以想到用字串去接收。對於奇偶情況的不同處理,程式中用一個flag作為判斷,就免去了考慮這個整數的位數原本是奇數還是偶數了。

易錯點:這道題的輸出的整數位數是和較長的那個保持一致,而不是我一開始以為的和後一個輸入的保持一致。


程式:


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

public class Main{
public static void main(String[] args) throws Exception {
	BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	String ab = bf.readLine();
	String[] a = ab.split(" ");
	int alength = a[0].length();
	int blength = a[1].length();
	int max = alength >= blength?alength:blength;
	int[] result = new int[max];
	int d = (blength-alength>=0)?blength-alength:alength-blength;
	if (d!=0) {
		if (alength<blength) {
			for (int i = 0; i < d; i++) {
				a[0] = "0" + a[0];
			}
		}else {
			for (int i = 0; i < d; i++) {
				a[1] = "0" + a[1];
			}
		}
	}
	int flag = 1;
	for (int i = max-1 ; i >=0; i--) {
	int t1=Integer.parseInt(String.valueOf(a[0].charAt(i)));
	int t2=Integer.parseInt(String.valueOf(a[1].charAt(i)));
	flag = -flag;
		if (flag==-1) {
			result[i] = (t1+t2)%13;
		}
		int temp = t2-t1;
		if (flag==1&&temp>=0) {
			result[i] = temp;	
		}
		if(flag==1&&temp<0){
			result[i] = temp+10;	
		}
	}
		for (int i = 0; i <result.length; i++) {
			if (result[i]==10) {
				System.out.print("J");
				continue;
			}
			if (result[i]==11) {
				System.out.print("Q");
				continue;
			}
			if (result[i]==12) {
				System.out.print("K");
				continue;
			}else {
				System.out.print(result[i]);
			}	
		}
	}	
}

相關文章