本题要求实现一种数字加密方法。首先固定一个加密用正整数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<string> 3 using namespace std; 4 5 int main() { 6 string s1, s2; 7 cin >> s1 >> s2; 8 int l1 = s1.length(), l2 = s2.length(); 9 int l3 = l1 > l2 ? l1 : l2; 10 char *A = new char[l3]; 11 char *B = new char[l3]; 12 13 for (int i = 0; i < l3; i++) { 14 A[i] = ‘0‘; 15 B[i] = ‘0‘; 16 } 17 18 int k1 = 0; 19 for (int i = l1-1; i >= 0; i--) { 20 A[k1++] = s1[i]; 21 } 22 int k2 = 0; 23 for (int i = l2 - 1; i >= 0; i--) { 24 B[k2++] = s2[i]; 25 } 26 27 char *ans = new char[l3]; 28 29 for (int i = 0; i < l3; i++) { 30 if (i % 2 == 0) { 31 int anwser = ((A[i] - ‘0‘) + (B[i] - ‘0‘)) % 13; 32 if (anwser == 10) ans[i] = ‘J‘; 33 else if (anwser == 11) ans[i] = ‘Q‘; 34 else if (anwser == 12) ans[i] = ‘K‘; 35 else ans[i] = anwser + ‘0‘; 36 } 37 else { 38 int anwser = ((B[i] - ‘0‘) - (A[i] - ‘0‘)); 39 if (anwser < 0) anwser += 10; 40 ans[i] = anwser + ‘0‘; 41 } 42 } 43 for (int i = l3-1; i >=0; i--) 44 cout << ans[i]; 45 return 0; 46 }
原文地址:https://www.cnblogs.com/Gzu_zb/p/9363907.html
时间: 2024-10-09 21:08:25