本題要求實現一種數字加密方法。首先固定一個加密用正整數A,對任一正整數B,將其每1位數字與A的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加后對13取余——這里用J代表10、Q代表11、K代表12;對偶數位,用B的數字減去A的數字,若結果為負數,則再加10。這里令個位為第1位。
輸入格式:
輸入在一行中依次給出A和B,均為不超過100位的正整數,其間以空格分隔。
輸出格式:
在一行中輸出加密后的結果。
輸入樣例:1234567 368782971輸出樣例:3695Q8118#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>#define Max 100001using namespace std;int main(){ char a[Max],b[Max],c[Max],d[Max]; int M[Max]; char z[4]={'J','Q','K'}; scanf("%s %s",a,b); int l,k=0; if(strlen(a)>strlen(b)){ for(int i=0;i<strlen(a);i++) d[i]=a[i]; for(int i=0;i<strlen(a)-strlen(b);i++) { c[i]='0'; k++; } for(int i=0;i<strlen(b);i++) { c[k++]=b[i]; } } else { for(int i=0;i<strlen(b);i++) c[i]=b[i]; for(int i=0;i<strlen(b)-strlen(a);i++) { d[i]='0'; k++; } for(int i=0;i<strlen(a);i++) { d[k++]=a[i]; } } int f=1; for(int i=k-1;i>=0;i--) { int n,m; if(f%2==1) { n=(c[i]-'0')+(d[i]-'0'); n=n%13; M[i]=n; } else { m=(c[i]-'0')-(d[i]-'0'); if(m<0) m=m+10; M[i]=m; } f++; } for(int i=0;i<k;i++) { if(M[i]>=10) PRintf("%c",z[M[i]-10]); else printf("%d",M[i]); } printf("/n"); system("pause"); return 0;}
新聞熱點
疑難解答