PAT-字符串處理-B 1048 數字加密 (20分)

題目: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 }
View Code
相關文章
相關標籤/搜索