当前位置: 代码迷 >> 综合 >> 【PAT乙级】1074 宇宙无敌加法器
  详细解决方案

【PAT乙级】1074 宇宙无敌加法器

热度:12   发布时间:2024-02-27 14:01:36.0

题目链接:1074 宇宙无敌加法器

思路

  1. 20位这个规模考虑用字符串保存数字,我基本上用int快写完了才注意到。。。
  2. 每次将3个数字的最后一位取出,不存在则置0,当进制为0改为10。
  3. 加法是同位相加,再加进位,对进制取余是本位结果,商是进位。
  4. 循环至两数为空,进位为0为止。

代码

#include <iostream>
using namespace std;int main(){string N, M1, M2, out;int a, b, c, carry = 0;char d;cin >> N >> M1 >> M2;while(M1.length() || M2.length() || carry){//只要有一个还在就继续循环a = 0;b = 0;c = 0;if(N.length()){a = N[N.length()-1]-'0';N.erase(N.length()-1,1);}if(M1.length()){b = M1[M1.length()-1]-'0';M1.erase(M1.length()-1,1);}if(M2.length()){c = M2[M2.length()-1]-'0';M2.erase(M2.length()-1,1);}if(!a) a = 10;d = (b + c + carry) % a + '0';out.insert(0,1,d);carry = (b + c + carry) / a;}while(out[0] == '0' && out.length()!=1) out.erase(0,1);cout << out << endl;return 0;
}