60分悬关
查看原帖
60分悬关
246331
mystic_qwq楼主2023/5/2 17:37

高精加法,B为进制数

#include <iostream>
#include <cstring>
//using i64 = long long;
const int MAXN = 2002; 

bool issmall(char c){
	return c >= 'a' && c <= 'z';
}

int B;
struct BigNum {
	int a[MAXN] = {0}, len = 0;
	void flat(){
		for (int i = 0; i < len; ++ i)
			a[i + 1] += a[i] / B, a[i] %= B,
			(i == len - 1 && a[i + 1]) && (++ len);
	}
	BigNum(int t = 0){
		while (t)
			a[len++] = t % B,
			t /= B;
		flat();
	}
	BigNum(char s[] = "0"{
		len = strlen(s);
		for (int i = strlen(s) - 1; i >= 0; -- i)
			a[strlen(s) - 1 - i] = 
			isdigit(s[i]) ? (s[i] - '0') 
			: issmall(s[i]) ? (s[i] - 'a' + 10)
			: (s[i] - 'A' + 10);
	}
	void output(){
		for (int i = len - 1; i >= 0; -- i) 
			putchar(a[i] + '0');
	}
	BigNum operator + (const BigNum& A) const {
		BigNum _B = 0; _B.len = std::max(len, A.len);
		for (int i = 0; i < _B.len; ++ i){
			_B.a[i] = a[i] + A.a[i];
		}
		_B.flat();
		return _B;
	}
} n1 = 0, n2 = 0;


char s1[2001], s2[2001];
int main(){
	std::cin >> B;
	std::cin >> s1 >> s2;
	n1 = s1, n2 = s2;
	BigNum n3 = n1 + n2;
	n3.output();
	return 0;
}
2023/5/2 17:37
加载中...