高精度加法求调
  • 板块学术版
  • 楼主sxwgysh
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/2/6 20:04
  • 上次更新2025/2/6 23:34:53
查看原帖
高精度加法求调
1229211
sxwgysh楼主2025/2/6 20:04

rt,我的代码有点不一样,没找到一样的

#include <bits/stdc++.h>

using namespace std;

const int ten = 10;
const int N = 1e5 + 10;

struct gaojing {
	int n;
	int z[N];
	char s[N]; 
	gaojing() {
		n = 1;
		memset(z, 0, sizeof(z));
	}
	void read() {
		scanf("%s", &s + 1);
		bool neg = false;
		if(s[1] == '-') neg == true;
		int l = strlen(s + 1);
		for(int i = 1, j = l; i <= l - neg; ++ i, -- j) {
			z[i] = s[j] - '0';
			if(neg) z[i] = -z[i];
		}
		n = l - neg;
	}
	void print() {
		for(int i = n; i >= 1; -- i)
			printf("%d", z[i]);
	}
}a, b;

gaojing operator+(const gaojing &a, const gaojing &b) {
	gaojing c;
	c.n = max(a.n, b.n);
	for(int i = 1; i <= c.n; ++ i) {
		c.z[i] = a.z[i] + b.z[i];
		c.z[i + 1]+= c.z[i] / ten;
		c.z[i] = c.z[i] % ten;
	}
	if(c.z[c.n + 1] != 0) ++ c.n;
	bool neg = false;
	if(c.z[c.n] < 0) neg = true;
	for(int i = c.n; i >= 1; ++ i) {
		if(c.z[i] < 0 && neg == false) {
			c.z[i] += ten;
			c.z[i + 1] --;
		}
		if(c.z[i] > 0 && neg == true) {
			c.z[i] -= ten;
			c.z[i + 1] ++;
		}
	} 
	return c;
}

signed main() {
	a.read();
	b.read();
	(a + b).print();
	return 0;
}
2025/2/6 20:04
加载中...