本题要求实现一种数字加密方法。首先固定一个加密用正整数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>
int main(void)
{
char hash[13]={'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
char str[250];
gets(str);
int len =strlen(str);
int qi_id1=0,qi_id2;
int len1,len2;
for(int i=0;i<len;i++)
{
if(str[i]==' ')
{
len1=i;
qi_id2=i+1;
len2 = len - len1-1;
break;
}
}
int n,temp,num=1;
if(len2>=len1)
{
num =len2;
n =len2 -len1;
for(int i =0;i<n;i++)
{
num--;
temp= str[qi_id2++]-'0';
printf("%c",hash[temp]);
}
for(int i=0;i<len1;i++)
{
if(num%2==0)
{
num--;
temp = str[qi_id2++] -'0'-str[qi_id1++] +'0';
if(temp<0) temp =temp +10;
printf("%c",hash[temp]);
}
else
{
num--;
temp = str[qi_id2++] -'0'+str[qi_id1++] -'0';
temp =temp%13;
printf("%c",hash[temp]);
}
}
}
else
{ num=len1;
n = len1 -len2;
for(int i =0;i<n;i++)
{
if(num%2==0)
{temp= str[qi_id1++]-'0';
temp=-temp;
if(temp<0) temp =temp+10;
printf("%c",hash[temp]);}
else {
temp =str[qi_id1++]-'0';
printf("%c",hash[temp]);
}
num--;
}
for(int i=0;i<len2;i++)
{
if(num%2==0)
{
num--;
temp = str[qi_id2++] -'0'-str[qi_id1++] +'0';
if(temp<0) temp =temp +10;
printf("%c",hash[temp]);
}
else
{
num--;
temp = str[qi_id2++] -'0'+str[qi_id1++] -'0';
temp =temp%13;
printf("%c",hash[temp]);
}
}
}
}