本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
在一行中输出加密后的结果。
1234567 368782971
3695Q8118
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 int main(){ 6 char a1[105]="1234567"; 7 char b1[105]="368782971"; 8 cin>>a1>>b1; 9 char a[105]=""; 10 char b[105]=""; 11 int j=0,c=0; 12 int mix=0; 13 if(strlen(a1)>mix) 14 mix=strlen(a1); 15 if(strlen(b1)>mix) 16 mix=strlen(b1); 17 for(int i=strlen(b1)-1;i>=0;i--){ 18 b[j]=b1[i]; 19 j++; 20 } 21 j=0; 22 for(int i=strlen(a1)-1;i>=0;i--){ 23 a[j]=a1[i]; 24 j++; 25 } 26 for(int i=mix-1;i>=0;i--){ 27 if(a[i]==0) 28 a[i]=‘0‘; 29 if(b[i]==0) 30 b[i]=‘0‘; 31 if((i+1)%2==0){ 32 c=(b[i]-‘0‘-(a[i]-‘0‘)); 33 if(c<0){ 34 c+=10; 35 } 36 cout<<c; 37 }else{ 38 c=(a[i]-‘0‘+(b[i]-‘0‘))%13; 39 if(c<10) 40 cout<<c; 41 else if(c==10) 42 cout<<"J"; 43 else if(c==11) 44 cout<<"Q"; 45 else if(c==12) 46 cout<<"K"; 47 } 48 } 49 //cout<<b<<"\n"<<a; 50 return 0; 51 }
原文:https://www.cnblogs.com/geyang/p/12334361.html