1048 數字加密 (20 分)
本題要求實現一種數字加密方法。首先固定一個加密用正整數 A,對任一正整數 B,將其每 1 位數字與 A 的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對 13 取餘——這裏用 J 代表 10、Q 代表 11、K 代表 12;對偶數位,用 B 的數字減去 A 的數字,若結果爲負數,則再加 10。這裏令個位爲第 1 位。
輸入格式:
輸入在一行中依次給出 A 和 B,均爲不超過 100 位的正整數,其間以空格分隔。
輸出格式:
在一行中輸出加密後的結果。
輸入樣例:
1234567 368782971
輸出樣例:
3695Q8118
#include <cstdio>
#include <cstring>
#include <cmath>
int main()
{
char A[102] = {0}, B[102] = {0}, C[102] = {0};
char S[15] = "0123456789JQK";//字符串,表示0~9,J~K
scanf("%s %s", A, B);
int lenA = strlen(A), lenB = strlen(B);
int len = lenA < lenB ? lenA : lenB;
int i = 0, j = 0, k = 0;//k爲C的下標
for(i = 1; i<=len; i++, k++)//相同部分
{
if(i%2) C[k] = S[(A[lenA-i] + B[lenB-i] - '0' - '0')%13];//奇數位
else//偶數位
{
int temp = B[lenB-i] - A[lenA-i];//二者相減可以省去同時減‘0’
C[k] = S[temp<0?temp+10:temp];
}
}
for(j = i; j<=lenA; j++, k++)//A的剩下幾位
{
if(j%2) C[k] = A[lenA-j];
else
{
int temp = A[lenA-j] -'0';
C[k] = S[!temp?0:10 - (A[lenA-j] -'0')];
}
}
for(j = i; j<=lenB; j++, k++) C[k] = B[lenB-j];//B的剩下幾位,還是B本身
while(k) printf("%c", C[--k]);//逆序輸出即可
return 0;
}