PAT 1048 數字加密 20

2021-08-15 21:54:39 字數 1184 閱讀 1655

題目描述:

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

輸入格式:

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

輸出格式:

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

輸入樣例:

1234567 368782971
輸出樣例:
3695q8118
題目分析:

筆者看到了之後,立馬想到的是大整數,更優秀的想法暫時還沒有。我將注意點和對變數、語句的解釋在**區中給出。請看下文**:

#include#include/*注意點:

筆者一看到題目描述中最多有一百位,所以立馬想到了按照大整數的原則進行處理。

1.maxn要設定的比100大,因為加密之後的位數可能會多於100.

2.關於數a和數b的長度,如果a位數更多,需要將b的高位補零到a b的位數相等,如果b的位數更多也同樣處理。題目第乙個和最後乙個的測試點皆是此陷阱

3.個位是第一位

*/const int maxn=1000;

struct bign

}bigna,bignb,ans; //定義三個bign型別的變數 bigna,bignb,最後的加密結果ans

bign change(char str)

return ans; //返回轉換後的結果

} bign code(bign f1,bign f2)

while(f1.len =0)

else ans.num[ans.len++]=temp+10;

} else

} return ans; //返回加密的結果

}void print(bign f1)else if(f1.num[i]==11)else if(f1.num[i]==10)

else printf("%d",f1.num[i]); //負責輸出數字 }}

int main()

PAT 1048 數字加密 20

本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用j代表10 q代表11 k代表12 對偶數字,用b的數字減去a的數字,若結果為負數,則再加10。這裡令個位為第1位。輸入格式 輸入...

PAT1048 數字加密 20

本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用j代表10 q代表11 k代表12 對偶數字,用b的數字減去a的數字,若結果為負數,則再加10。這裡令個位為第1位。輸入格式 輸入...

PAT 1048 數字加密 20

本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用j代表10 q代表11 k代表12 對偶數字,用b的數字減去a的數字,若結果為負數,則再加10。這裡令個位為第1位。輸入格式 輸入...