乙級 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>
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]);
}
}
}
}