PTA 乙级 1074 宇宙无敌加法器 (20 分) C++

 

 好久没更了,不是我忘了,实在是觉得PTA的题有些部分出的很***钻,并且不打算考PTA,就当做着玩玩

首先 N > 20,为大数运算,首先确定存储数据的变量为字符串(用整型存储会导致测试点3,4无法通过)

之后每位的和的进位计算不难

有几个需要注意的点

  • 最高位加和后,注意进位一定也要再做处理(测试点1
  • 注意结果为0的情况(测试点5
  • 字符串前导0的去除
  • N中的0表示十进制

C++

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 int main() {
 7     string n, pta1, pta2, sum;
 8     int carry = 0;
 9     cin >> n >> pta1 >> pta2;
10     while(pta1.size() < n.size()) pta1 = '0' + pta1;
11     while(pta2.size() < n.size()) pta2 = '0' + pta2;
12     for(int i = n.size() - 1; i >= 0; --i){
13         //进制
14         int scale = n[i] - '0';
15         if(scale == 0) scale = 10;
16         //取出两数需要处理的位
17         int rem1 = pta1[i] - '0', rem2 = pta2[i] - '0';
18         //此时得到的和为逆序
19         sum += to_string((rem1 + rem2 + carry) % scale);
20         //计算进位
21         carry = (rem1 + rem2 + carry) / scale;
22     }
23     //最高位相加后剩余的进位
24     if(carry != 0) sum += to_string(carry);
25     //舍去前导零
26     while(sum.back() == '0' && sum.size() > 1)sum.pop_back();
27     cout << string(sum.rbegin(), sum.rend());
28     return 0;
29 }

 

posted @ 2021-03-03 22:16  上帝的绵羊  阅读(179)  评论(0编辑  收藏  举报