一开始敲代码前俩个测试点总是没过去,参考这位PAT Basic 1048. 数字加密(20)(C语言实现)
代码如下
/*#include <stdio.h>
int main()
{
char A[1000], B[1000], *pa, *pb, str[1000];
int index = 0;
pa = A; pb = B;
scanf("%s %s", A, B);
while(*(++pa)) ;
while(*(++pb)) ;
pa--; pb--;
for(int i = 1; *pa && *pb; pa--, pb--, i++)
{
if(i % 2)
{
if((*pa - '0' + *pb - '0') % 13 == 10)
str[index++] = 'J';
else if((*pa - '0' + *pb - '0') % 13 == 11)
str[index++] = 'Q';
else if((*pa - '0' + *pb - '0') % 13 == 12)
str[index++] = 'K';
else
str[index++] = (*pa - '0' + *pb - '0') % 13 + '0';
}
else
str[index++] = (*pb - '0') - (*pa - '0') >= 0 ? (*pb - '0') - (*pa - '0') + '0' : (*pb - '0') - (*pa - '0') + 10 + '0';
}
while(*pa) str[index++] = *pa--;
while(*pb) str[index++] = *pb--;
for(--index;index >= 0; index--)
putchar(str[index]);
return 0;
} */
#include <stdio.h>
#include <string.h>
int main()
{
char A[1000], B[1000], str[] = "0123456789JQK";
int alen, blen, max, a, b;
scanf("%s %s", A, B);
alen = strlen(A);
blen = strlen(B);
max = alen > blen ? alen : blen;
for(int i = 0; i < max; i++)
{
a = alen + i - max < 0 ? 0 : A[alen + i - max] - '0';
b = blen + i - max < 0 ? 0 : B[blen + i - max] - '0';
if((max - i) % 2)
putchar(str[(a + b) % 13]);
else
putchar('0' + (b - a < 0 ? b - a + 10 : b - a));
}
return 0;
}