PAT-1048 數字加密20
阿新 • • 發佈:2019-02-16
很坑的題目,測試例子要求如果B的長度小於A,則在B前邊填上0補齊,題目中並沒有說。
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; #define MAX 100+10 void zero(char a[], int d) { for (int i = strlen(a)-1; i >=0; i--) a[i+d] = a[i]; for (int i = 0; i < d; i++) a[i] = '0'; return; } char A[MAX], B[MAX], C[MAX]; int main() { freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); cin >> A >> B; int f = 1, i = 0, j = 0; if (strlen(B) < strlen(A)) zero(B, strlen(A)-strlen(B)); for (i = strlen(A)-1, j = strlen(B)-1; i >= 0 && j >= 0; i--, j--) { if (1 == f)//奇數位 { int sum = 0; sum = (A[i]-'0' + B[j]-'0') % 13; if (sum < 10) C[j] = (char)(sum+'0'); else { switch(sum) { case 10: C[j] = 'J'; break; case 11: C[j] = 'Q'; break; case 12: C[j] = 'K'; break; } } f = 0; } else if (0 == f) { int dev; dev = B[j] - A[i]; if (dev < 0) dev += 10; C[j] = (char)(dev+'0'); f = 1; } } while (j >= 0) { C[j] = B[j]; j--; } cout << C; return 0; }