PAT 1074 宇宙无敌加法器

博客介绍字符串按位相加运算方法。需在相加前补齐字符串长度以方便运算,因 long long int 存不下 21 位十进制数,要把每一位当字符串处理,不能用一个数存相加结果,同时要单独考虑结果为 0 的情况。

题目链接

正常的按位相加即可

  1. 在相加之前将字符串长度补齐,方便运算。
  2. long long int 好像存不下21位10进制数,所以要把每一位当字符串处理,不要试图用一个数去存储相加的结果。
  3. 结果为0的情况要单独考虑。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
int main() {
	string base;
	string a, b;
	cin >> base >> a >> b;
	string s1(base.length() - a.length(),'0');
	a = s1 + a;
	string s2(base.length() - b.length(), '0');
	b = s2 + b;
	
	vector<int>res;
	int base_int = 0;
	int carry = 0;
	for (int i = base.size() - 1; i >= 0; i--) {
		base_int = base[i] == '0' ? 10 : (base[i] - '0');
		res.push_back((a[i] + b[i] - '0' - '0'+ carry) % base_int);
		carry = (a[i] + b[i] - '0' - '0' + carry) / base_int;
		
	}
	if (carry != 0)
		res.push_back(1);
	long long int result = 0;
	reverse(res.begin(), res.end());

	int flag = 0;
	for (int i = 0; i < res.size(); i++) {
		if (res[i] != 0 || flag == 1) {
			flag = 1;
			cout << res[i];
		}
	}
	if (flag == 0) {
		cout << 0;
	}
	return 0;
}
复制代码

转载于:https://juejin.im/post/5ccd8cf8f265da039257f2ff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值