zoukankan      html  css  js  c++  java
  • 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 }
    默默地一点点变强,细节决定成败
  • 相关阅读:
    Android登入界面
    安卓第4周作业
    第13周作业
    5.28上机作业
    5.22作业
    数据返回值
    登录
    安卓
    安卓第四周
    安卓第四周
  • 原文地址:https://www.cnblogs.com/SCP-514/p/14477305.html
Copyright © 2011-2022 走看看