题目描述:
本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位
输入描述:
输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。
输出描述:
在一行中输出加密后的结果。
代码
#include<stdio.h>
#include<string.h>
char cal(char a, char b,int count)
{
char num;
if(count%2!=0)//奇数位
{
num=a-'0'+b-'0';
num%=13;
if(num==10)
num='J';
else if(num==11)
num='Q';
else if(num==12)
num='K';
else
num+='0';//....
}
else//偶数位
{
num=b-a;
if(num<0)
num+=10;
num+='0';//....
}
return num;
}
void reverse(char *a)
{
int i,j,len=strlen(a);
char tmp;
for(i=0,j=len-1;i<j;i++,j--)
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
int main()
{
char a[101],b[101],result[101];
for(int i=0;i<101;i++)
a[i]=b[i]='0';
scanf("%s %s",&a,&b);
int la=strlen(a);
int lb=strlen(b);
int max=(la>lb)?la:lb;
reverse(a);
reverse(b);
a[la]='0';
b[lb]='0';
int count=0;
for(int i=0;i<max;i++)
{
result[count]=cal(a[i],b[i],count+1);
count++;
}
for(int i=max-1;i>=0;i--)
printf("%c",result[i]);
}