题目描述
输入两个整数A,B,求A+B
输入描述
第一行,整数A
第二行,整数B
A,B位数长度均小于160
输出描述
A+B的结果
样例输入
1234567890987654321099999 12345678901
样例输出
1234567890987666666778900
分析
1、用字符串来处理,每次自右向左各自4读取两个字符串的一位,
2、两个数计算记录下一位和以及进位,
3、将和插入到结果字符串的头,产生的进位参与下一位的计算
4、由于可能一直产生进位,比如99999有一个进位1,所以要一直计算到较长的字符串结束
5、最后对最后一个进位进行判断
#include "pch.h"
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
using std::cout;
using std::cin;
using std::endl;
std::string andAB(std::string s1, std::string s2);
int main()
{
std::string s1, s2;
cin >> s1;
cin >> s2;
cout << andAB(s1, s2) << endl;
return 0;
}
//A+B
std::string andAB(std::string s1, std::string s2)
{
std::string r = "";
int length1 = s1.size();
int length2 = s2.size();
int carry = 0, sum = 0; //进位,和
int num1, num2; //分别取s1, s2的一位计算
for (int i = 0; i < std::max(length1, length2); i++) //可能一直有进位,所以要算到最大的
{
if (i >= length1)
num1 = 0;
else
num1 = static_cast<int>(s1[length1 -1 - i] - '0');
if (i >= length2)
num2 = 0;
else
num2 = static_cast<int>(s2[length2 -1 - i] - '0');
sum = (num1 + num2 + carry) % 10; //位相加的个位
carry = (num1 + num2 + carry) / 10; //位相加进位
r.insert(0, std::to_string(sum));
}
if (carry == 1)
{
r.insert(0, "1");
}
return r;
}
运行结果