A+B求调
  • 板块灌水区
  • 楼主Jack_John_Guzon
  • 当前回复15
  • 已保存回复15
  • 发布时间2024/8/21 13:20
  • 上次更新2024/8/21 15:46:19
查看原帖
A+B求调
1015619
Jack_John_Guzon楼主2024/8/21 13:20

A+B

#include<bits/stdc++.h>
#define MAXN 10500
using namespace std;
string _add(string a, string b) {
	string sum;
	int na[MAXN] = {0}, nb[MAXN] = {0}, ans[MAXN + 1] = {0};
	for(int i = a.size(); i > 0; i --)na[i] = a[a.size() - i] - '0';
	for(int i = b.size(); i > 0; i --)nb[i] = b[b.size() - i] - '0';

	int maxl = max(a.size(), b.size());
	for(int i = 1; i <= maxl; i ++) {
		ans[i + 1] = (ans[i] + na[i] + nb[i]) / 10;
		ans[i] = (ans[i] + na[i] + nb[i]) % 10;
	}//相加
	if(ans[maxl + 1] != 0)sum += "1";//特判 防止最大位进位
	for(int i = maxl; i > 0; i --)sum += ans[i]+'0';
	if(sum == "-0") {
		sum.erase(0, 1);
	}
	return sum;
}

string _minus(string a, string b) {
	int na[MAXN] = {0}, nb[MAXN] = {0}, ans[MAXN] = {0};
	string diff;

	if((a < b && a.size() <= b.size()) || b.size() > a.size())
		return "-" + _minus(b, a);

	for(int i = a.size(); i > 0; i --)na[i] = a[a.size() - i] - '0';
	for(int i = b.size(); i > 0; i --)nb[i] = b[b.size() - i] - '0';

	int maxl = max(a.size(), b.size());

	for(int i = 1; i <= maxl; i ++) {
		if(na[i] < nb[i]) {
			na[i + 1] --;
			na[i] += 10;
		}
		ans[i] = na[i] - nb[i];
	}
	while(ans[maxl] == 0)maxl --;//防止减后降位,多输出若干0
	if(maxl < 1)return "0";
	for(int i = maxl; i > 0; i --)diff += ans[i] + '0';//数组转化为字符串。
	if(diff == "-0") {
		diff.erase(0, 1);
	}
	return diff;
}

int main() {
	string a, b;
	cin >> a >> b;
	if(a[0] == '-' && b[0] == '-') { //当两个数字为负数
		a.erase(0, 1);
		b.erase(0, 1);
		cout << _add(b,a);
		return 0;
	} else if(a[0] == '-') { 
		a.erase(0, 1);
		cout << "-" << _minus(a, b);  //-a-b=-(a+b)
		return 0;
	} else if(b[0] == '-') { //只有b为负数
		b.erase(0, 1);
		cout << _minus(a, b);  //a-(-b)=a+b
		return 0;
	} else 
		cout << _add(a, b);
	return 0;
}

求调,呜呜

2024/8/21 13:20
加载中...