1. 程式人生 > >PAT乙級—1048. 數字加密(20)-native

PAT乙級—1048. 數字加密(20)-native

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

輸入格式:

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

輸出格式:

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

輸入樣例:
1234567 368782971
輸出樣例:
3695Q8118

思路:這個題最坑的就是你以為如果A的位數比B長就不用管了,其實還是得把B補成跟A一樣長才行。若A

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    string A,tB;
    cin>>A>>tB;
    int len1=A.size();
    int len2=tB.size();
    int max=len1>len2?len1:len2;
    char C[max];
    string B="";
    if(len1>len2){  //如果A比B長,長多少則補幾個0
        for(int i=0
;i<len1-len2;i++) B+='0'; } B+=tB;//補在左邊 for(int i=B.size()-1,j=A.size()-1;i>=0&&j>=0;i--,j--){ if((B.size()-i)%2==0){ //從右邊起如果是偶數位 if(B[i]-A[j]<0){//B的數字減去A的數字也就是字元相減 C[i]=(B[i]-A[j])+10+'0';//判斷完是否小於0之後轉換成字元 }else
{ C[i]=B[i]-A[j]+'0';//大於0則直接轉換成字元 } }else{ //如果是奇數位 if((B[i]-'0'+A[j]-'0')%13==10)//先將對應位轉換成數字再對13取餘 C[i]='J'; else if((B[i]-'0'+A[j]-'0')%13==11) C[i]='Q'; else if((B[i]-'0'+A[j]-'0')%13==12) C[i]='K'; else { C[i]=(B[i]-'0'+A[j]-'0')%13+'0'; } } } for(int i=0;i<len2-len1;i++)//若A>B,將不變的元素賦值過來 C[i]=B[i]; for(int i=0;i<max;i++){ cout<<C[i]; } return 0; }

題目連結: