PAT 乙级 1048

题目

    题目地址:PAT 乙级 1048

 

思路

    这道题坑的地方在于:即使B的长度小于A,仍然要对B补齐,也就是说最终结果的长度取决于A和B中长度更长的那一项;即只要A、B长度不一致,就要对短的一个进行补齐操作

    在补齐过程中解决了之前一直忽略的一个问题——对于string类型的字符串按字符逐个进行赋值,这个过程中就出现了问题:

        先来看一段代码

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 int main() {
 6     string str;
 7     for (int i = 0; i < 10; i++)
 8         str[i] = '0';
 9     cout << str.size() << endl;
10     cout << str << endl;
11 
12     return 0;
13 }

        那么这段代码的结果会是怎样的?我们来验证一下

0

        显然并不是预想的结果,原因就在于string不能像char一样实现a[ i ] = b[ j ]这样的操作

    对于string类型的字符串实现逐个字符赋值,需要使用 “+=” 这个算符实现,代码如下:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 int main() {
 6     string str;
 7     for (int i = 0; i < 10; i++)
 8         str += '0';          //赋值时一定注意格式是str,而不是str[i]
 9     cout << str.size() << endl;
10     cout << str << endl;
11 
12     return 0;
13 }

    结果如下:

10
0000000000

    显然,这个结果才是我们希望看到的;

 

代码

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 int main() {
 6     string a, b;
 7     string zero;
 8     for (int i = 0; i < 100; i++)
 9         zero += '0';
10     string result;
11     cin >> a >> b;
12     int len_a = a.size();
13     int len_b = b.size();
14     if (len_a > len_b) {
15         string tmp = b;
16         string tmp1;
17         int len = len_a - len_b;
18         tmp1 = zero.substr(0, len);
19         b = tmp1 + tmp;
20     }
21     else if (len_a < len_b) {
22         string tmp = a;
23         string tmp1;
24         int len = len_b - len_a;
25         tmp1 = zero.substr(0, len);
26         a = tmp1 + tmp;
27     }
28     bool flag = true;
29     for (int i = a.size() - 1; i >= 0; i--) {
30         if (flag) {
31             int tmp = ((int(b[i]) - 48) + (int(a[i]) - 48)) % 13;
32             if (tmp == 10)
33                 result.push_back('J');
34             else if (tmp == 11)
35                 result.push_back('Q');
36             else if (tmp == 12)
37                 result.push_back('K');
38             else
39                 result.push_back(char(tmp + 48));
40             flag = false;
41         }
42         else {
43             int tmp = ((int(b[i]) - 48) - (int(a[i]) - 48));
44             if (tmp < 0)
45                 tmp += 10;
46             result.push_back(char(tmp + 48));
47             flag = true;
48         }
49     }
50     for (int i = result.size() - 1; i >= 0; i--)
51         cout << result[i];
52     cout << endl;
53 
54     return 0;
55 }

 

posted @ 2018-08-30 17:47  moujun  阅读(210)  评论(0编辑  收藏  举报