我的PAT系列文章更新重心已移至Github停撞,歡迎來看PAT題解的小伙伴請到Github Pages瀏覽最新內(nèi)容。此處文章目前已更新至與Github Pages同步瘫拣。歡迎star我的repo搏明。
題目
本題要求實現(xiàn)一種數(shù)字加密方法。首先固定一個加密用正整數(shù) A郭膛,對任一正整數(shù) B晨抡,將其每 1 位數(shù)字與 A
的對應(yīng)位置上的數(shù)字進(jìn)行以下運(yùn)算:對奇數(shù)位,對應(yīng)位的數(shù)字相加后對 13 取余——這里用 J 代表 10则剃、Q 代表 11耘柱、K 代表 12;對偶數(shù)位棍现,用 B
的數(shù)字減去 A 的數(shù)字调煎,若結(jié)果為負(fù)數(shù),則再加 10己肮。這里令個位為第 1 位士袄。
輸入格式:
輸入在一行中依次給出 A 和 B,均為不超過 100 位的正整數(shù)朴肺,其間以空格分隔窖剑。
輸出格式:
在一行中輸出加密后的結(jié)果。
輸入樣例:
1234567 368782971
輸出樣例:
3695Q8118
思路
要注意位數(shù)不足的話在前面補(bǔ)0戈稿。
代碼
最新代碼@github西土,歡迎交流
#include <stdio.h>
#include <string.h>
int main()
{
char A[101], B[101];
char encrypt[] = "0123456789JQK";
scanf("%s %s", A, B);
int lenA = strlen(A);
int lenB = strlen(B);
int maxlen = lenA > lenB ? lenA : lenB;
int a, b;
for(int i = 0; i < maxlen; i++)
{
a = lenA + i - maxlen < 0 ? 0 : A[lenA + i - maxlen] - '0';
b = lenB + i - maxlen < 0 ? 0 : B[lenB + i - maxlen] - '0';
if((maxlen - i) % 2)
putchar(encrypt[(a + b) % 13]);
else
putchar('0' + (b - a < 0 ? b - a + 10 : b - a));
}
return 0;
}