A+B

 

题目描述

输入两个整数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;
}

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值