PAT-字符串处理-B 1048 数字加密 (20分)

题目:

思路:

  将输入数字存储到数组中,然后再将两数对齐,再翻转,从数组头开始遍历,即从数字的个位开始遍历,依据题意进行变换,遍历完后,再进行一次翻转,然后输出结果

注意点:

  此题较坑,测试点2、5为数字B长度小于数字A长度的情况,需对数字B在前面补0至与数字A等长,然后再继续换算

代码:

 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
原文地址:https://www.cnblogs.com/fangzhiyou/p/12489532.html