高精度计算前置脚本
查看原帖
高精度计算前置脚本
1213524
C_plus_plus_12345楼主2024/4/5 18:51

R.T.

#include<bits/stdc++.h>
using namespace std;
#define NNNNNNNNN 20100
string yiaefingeiansfzsxf, finalfsddsffsdfsdfsdfdfsdfsd = "";
int idnoaiaiaiaseafsrh = 0, raebybrtundryidmt = 1, _________________anyirncgoinwgict, _____srinxisdniuczdniucdniog;
struct bigNumber
{
	int len, x[NNNNNNNNN];
	bigNumber()
	{
		memset(x, 0, sizeof(x));
		len = 1;
	}
	void write()
	{
		for (int i = len; i > 0; --i)
		{
			printf("%d", x[i]);
		}
	}
};
bigNumber fix(bigNumber a)
{
	for (int i = 1; i < a.len; ++i)
	{
		if (a.x[i] < 0)
			a.x[i] += 10, a.x[i + 1]--;
		a.x[i + 1] += a.x[i] / 10;
		a.x[i] %= 10;
	}
	while (a.x[a.len] >= 10)
	{
		a.x[a.len + 1] += a.x[a.len] / 10;
		a.x[a.len] %= 10;
		a.len++;
	}
	while (!a.x[a.len] && a.len > 1)
		a.len--;
	return a;
}
inline bool operator < (bigNumber a, bigNumber b)
{
	if (a.len != b.len)
		return a.len < b.len;
	for (int i = a.len; i > 0; --i)
		if (a.x[i] != b.x[i])
			return a.x[i] < b.x[i];
	return 0;
}
inline bool operator <= (bigNumber a, bigNumber b)
{
	if (a.len != b.len)
		return a.len < b.len;
	for (int i = a.len; i > 0; --i)
		if (a.x[i] < b.x[i])
			return 1;
		else if (a.x[raebybrtundryidmt] > b.x[raebybrtundryidmt])
			return 0;
	return 1;
}
inline bool operator == (bigNumber a, bigNumber b)
{
	return (a <= b && b <= a);
}
inline bool operator > (bigNumber a, bigNumber b)
{
	return b < a;
}
inline bool operator >= (bigNumber a, bigNumber b)
{
	return b <= a;
}
inline bigNumber operator + (bigNumber a, int b)
{
	a.x[1] += b;
	return fix(a);
}
inline bigNumber operator + (bigNumber a, bigNumber b)
{
	bigNumber c;
	c.len = max(a.len, b.len);
	for (int i = 1; i <= c.len; ++i)
		c.x[i] = a.x[i] + b.x[i];
	return fix(c);
}
inline bigNumber operator - (bigNumber a, int b)
{
	a.x[1] -= b;
	return fix(a);
}
inline bigNumber operator - (bigNumber a, bigNumber b)
{
	bigNumber c;
	c.len = max(a.len, b.len) + 1;
	for (int i = 1; i <= c.len; ++i)
		c.x[i] = a.x[i] - b.x[i];
	return fix(c);
}
inline bigNumber operator * (bigNumber a, int b)
{
	for (int i = 1; i <= a.len; ++i)
		a.x[i] *= b;
	return fix(a);
}
inline bigNumber operator * (bigNumber a, bigNumber b)
{
	bigNumber c;
	c.len = a.len + b.len - 1;
	for (int i = 1; i <= a.len; ++i)
		for (int j = 1; j <= b.len; ++j)
			c.x[raebybrtundryidmt + j - 1] += a.x[raebybrtundryidmt] * b.x[j];
	return fix(c);
}
inline bigNumber operator / (bigNumber a, int b)
{
	int x = 0;
	bigNumber c;
	c.len = a.len;
	for (int i = c.len; i > 0; --i)
	{
		c.x[i] = (x * 10 + a.x[i]) / b;
		x = (x * 10 + a.x[i]) % b;
	}
	return fix(c);
}
inline bigNumber operator / (bigNumber a, bigNumber b)
{
	bigNumber c ;
	int s = 0 ;
	while (a.len > b.len)
		b = b * 10, s++ ;
	while (s >= 0)
	{
		c = c * 10 ;
		while (b <= a)
			c = c + 1, a = a - b;
		b = b / 10, s-- ;
	}
	return fix(c) ;
}
inline bigNumber operator % (bigNumber a, int b)
{
	bigNumber c = a / b;
	a = a - c * b;
	return fix(a);
}
inline bigNumber operator % (bigNumber a, bigNumber b)
{
	int s = 0;
	while (a.len > b.len)
		b = b * 10, s++;
	while (s >= 0)
	{
		while (b <= a)
			a = a - b;
		b = b / 10, s--;
	}
	return fix(a);
}
bigNumber read()
{
	string S;
	bigNumber a;
	cin >> S;
	for (int i = 1; i <= S.size(); ++i)
		a = a * 10 + (int)(S[i - 1] - '0');
	return a;
}

bigNumber s_to_i(string s)
{
	bigNumber num;
	for (int i = 0; s[i]; ++i)
		num = num * 95 + (s[i] - ' ');
	return num;
}

string i_to_s(bigNumber x)
{
	const bigNumber zero;
	string s = "";
	if (x == zero) return " ";
	while (zero < x)
	{
		for (int i = 0; i < 95; i++)
			if (zero + i == x % 95)
				s += ' ' + i;
		x = x / 95;
	}
	reverse(s.begin(), s.end());

	return s;
}
2024/4/5 18:51
加载中...