伞兵高精度 还没写好 先放这

struct node
{
    int a[25];
    node(){memset(a, 0, sizeof a); a[0] = 1;}
	node(int x)
	{
		a[0] = 0;
		if(!x) a[++a[0]] = 0;
		else while(x) a[++a[0]] = (x % 10), x /= 10;
	}
	inline void operator = (node A)
	{
		memset(a, 0, sizeof a); //
		for(int i = A.a[0]; i >= 0; --i)
		    a[i] = A.a[i];
	}
	inline node operator + (node A)
	{
		node B;
		B.a[0] = max(a[0], A.a[0]);
		for(int i = 1; i <= B.a[0]; ++i)
		{
			B.a[i] += a[i] + A.a[i]; //
			if(B.a[i] > 9)
			{
				B.a[i] -= 10;
				++B.a[i + 1];
				if(i == B.a[0]) ++B.a[0];
			}
		}
	    return B;
	}
	inline node operator - (node A)
	{
		node B;
		B.a[0] = a[0];
		for(int i = 1; i <= B.a[0]; ++i)
		{
			B.a[i] += a[i] - A.a[i];
			if(B.a[i] > 9)
			{
				B.a[i] -= 10;
				++B.a[i + 1];
				if(i == B.a[0]) ++B.a[0];
			}
			else if(B.a[i] < 0)
			{
				B.a[i] += 10;
				--B.a[i + 1];
			}
			else if(B.a[i] == 0 && i == B.a[0])
			    --B.a[0];
		}
		if(B.a[0] == 0 && B.a[1] == 0) B.a[0] = 1;
	    return B;
	}
	inline void Outgjd(node A)
{
	for(int i = A.a[0]; i; --i) cout << A.a[i];
}
	inline node Mul(node A, int x)
	{
		node B;
		B.a[0] = A.a[0]; 
		for(int i = 1; i <= B.a[0]; ++i)
		{
			B.a[i] += A.a[i] * x; //
			if(B.a[i] > 9)
			{
				B.a[i + 1] += (B.a[i] / 10);
				B.a[i] %= 10;
				if(i == B.a[0]) ++B.a[0];
			}
		}
		return B;
	}
	inline node operator * (node A)
	{
		node B;
		for(int i = a[0]; i >= 0; --i) B.a[i] = a[i];
		node D, C;
		for(int i = 1; i <= A.a[0]; ++i)
		{
			C = Mul(B, A.a[i]);
			
			if(i ^ 1) 
			    for(int j = C.a[0]; j; --j)
			     	C.a[j + i - 1] = C.a[j];
			    for(int j = 1; j < i; ++j) C.a[j] = 0; //
			C.a[0] += i - 1;
			D = D + C; 
		}
		return D;
	}
	inline bool operator <= (node A)
	{
		if(a[0] < A.a[0]) return true;
		if(a[0] > A.a[0]) return false;
		for(int i = a[0]; i; --i)
		    if(a[i] < A.a[i])
		        return true;
		    else if(a[i] > A.a[i]) return false; //
		return true;
	}
	inline node operator / (node A)
	{
		node B;
		for(int i = a[0]; i >= 0; --i) B.a[i] = a[i];
		node C = node(10), D;
	    node AA[25];
	    AA[A.a[0]] = A;
	    for(int i = A.a[0] + 1; i <= a[0]; ++i) AA[i] = AA[i - 1] * C;
	    D.a[0] = 0; //
		for(int i = a[0]; i >= A.a[0]; --i)
		{
			while(AA[i] <= B) 
			{
				B = B - AA[i];
				++D.a[i - A.a[0] + 1];
				if(!D.a[0]) D.a[0] = i - A.a[0] + 1;
			}	
		}
		return D;
	}
	inline node operator % (node A)
	{
		node B;
		for(int i = a[0]; i >= 0; --i) B.a[i] = a[i];
		node C = node(10);
	    node AA[25];
	    AA[A.a[0]] = A;
	    for(int i = A.a[0] + 1; i <= a[0]; ++i) AA[i] = AA[i - 1] * C;
		for(int i = a[0]; i >= A.a[0]; --i)
			while(AA[i] <= B) 
				B = B - AA[i];
		return B;
	}
};
inline node gcd(node a, node b)
{
	return (b.a[0] == 1 && b.a[1] == 0) ? a :gcd(b, a % b);
}
inline void Outgjd(node A)
{
	for(int i = A.a[0]; i; --i) cout << A.a[i];
}
struct FS{
	node fz, fm;
	FS(){fz = 0, fm = 1;}
	FS(node a, node b) : fz(a), fm(b){}
	inline void operator = (FS A)
	{
		fz = A.fz, fm = A.fm;
	}
	inline FS operator + (FS A)
	{
		node a = fm, b = fz, c = A.fm, d = A.fz;
		node x = b * c + a * d, y = a * c;
		node g = gcd(x, y);
		return FS(x / g, y / g);
	}
	inline FS operator / (int c)
	{
		node a = fm, b = fz;
		node x = b, y = a * c;
		node g = gcd(x, y);
		return FS(x / g, y / g);
	}
}val[N];
inline void Outfs(FS A)
{
	Outgjd(A.fz); cout << ' ';
	Outgjd(A.fm); cout << ' ';
	cout << '\n';
}
posted @   Faker_yu  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示