求助,关于我的重载运算符高精1*2=3, 1+3 = 5这件事
查看原帖
求助,关于我的重载运算符高精1*2=3, 1+3 = 5这件事
239167
Ptilopsis_w楼主2021/3/30 18:25

RT

#include<bits/stdc++.h>
using namespace std;

const int SIZE = 10005;
char ch[SIZE];
class bigint{
	private:
		int len;
		short s[SIZE];
	public:
		bigint(long long x = 0)
		{
			len = 1;
			if(x == 0)
				return;
			len = 0;
			while(x != 0)
			{
				s[++len] = x%10;
				x /= 10;
			}
		}
		void input()
		{
			scanf("%s", ch+1);
			len = strlen(ch+1);
			for(int i = 1; i <= len; i++)
				s[i] = ch[len-i+1]-48;
		}
		void print(bool endline = false)
		{
			for(int i = len; i >= 1; i--)
				putchar(s[i]+48);
			if(endline)
				putchar('\n');
		}
		friend bigint operator + (bigint a, bigint b)
		{
			bigint c;
			c.len = a.len > b.len ? a.len : b.len;
			for(int i = 1; i <= c.len+1; i++)
			{
				c.s[i] += a.s[i]+b.s[i];
				if(c.s[i] > 9)
					c.s[i+1]++, c.s[i] %= 10;
			}
			if(c.s[c.len+1] != 0)
			 c.len++;
			return c;
		}
		friend bigint operator * (bigint a, bigint b)
		{
			bigint c;
			for(int i = 1; i <= b.len; i++)
				for(int j = 1; j <= a.len; j++)
					c.s[i+j-1] += a.s[j]*b.s[i];
			c.len = a.len+b.len;
			for(int i = 1; i <= c.len; i++)
			{
				c.s[i+1] += c.s[i]/10;
				c.s[i] %= 10;
			}
			while(c.s[c.len] == 0 and c.len > 1)
				c.len--;
			return c;
		}
};

bigint s, k(1);

int main()
{
	int n; cin >> n;
	for(int i = 1; i <= n; ++i)
	{
		k = k*i;
		s = s+k;
	}
	s.print();
}
2021/3/30 18:25
加载中...