題目:ios
思路:數組
將輸入數字存儲到數組中,而後再將兩數對齊,再翻轉,從數組頭開始遍歷,即從數字的個位開始遍歷,依據題意進行變換,遍歷完後,再進行一次翻轉,而後輸出結果ide
注意點:
測試
此題較坑,測試點二、5爲數字B長度小於數字A長度的狀況,需對數字B在前面補0至與數字A等長,而後再繼續換算spa
代碼:code
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 char words[3] = { 'J','Q','K' }; 7 8 int main() 9 { 10 char A[110], B[100]; 11 12 scanf("%[0-9] %[0-9]", A, B); 13 14 //若B的長度小於A,則對B補0 15 if (strlen(A) > strlen(B)) 16 { 17 //正確讀出兩數長度 18 int dif = strlen(A) - strlen(B), len_A = strlen(A), len_B = strlen(B); 19 //進行補0 20 for (int i = len_A;i >= 0;i--) 21 { 22 if (i >= dif) B[i] = B[i - dif]; 23 if (i < dif)B[i] = '0'; 24 } 25 } 26 27 //對A、B翻轉,由數組把兩數字由個位對齊 28 reverse(A, A + strlen(A)); 29 reverse(B, B + strlen(B)); 30 31 //依據題意進行遍歷 32 for (int i = 0;i<min(strlen(A),strlen(B));i++) 33 { 34 int num; 35 //奇數位 36 if ((i+1) % 2) 37 { 38 num = ((B[i] - '0') + (A[i] - '0')) % 13; 39 if (num >= 10)B[i] = words[num - 10]; 40 else B[i] = num + '0'; 41 } 42 //偶數位 43 else 44 { 45 num = B[i] - A[i]; 46 if (num < 0)num += 10; 47 48 B[i] = num + '0'; 49 } 50 } 51 52 reverse(B, B + strlen(B)); 53 printf("%s", B); 54 55 return 0; 56 }