一直是WA,但是不知道哪里错了,自己随便测的数据都对呀
查看原帖
一直是WA,但是不知道哪里错了,自己随便测的数据都对呀
589713
tttaaattt123楼主2022/3/28 20:18
#include<iostream> 
#include<string.h>
using namespace std;
struct Complex {
	int a[2010];
	int n;
	Complex() {
		memset(a, 0, sizeof(a));
		n = 1;
	}
	Complex(char aa[], int nn) {
		memset(a, 0, sizeof(a));
		n = nn;

		for (int i = nn - 1; i >= 0; i--)
		{
			a[n - 1 - i] = aa[i] - '0';
		}
	}
	friend ostream& operator << (ostream& o, const Complex& b)
	{
		for (int i = b.n - 1; i >= 0; i--)
		{
			o << b.a[i];
		}
		return o;
	}
	Complex operator +(const Complex& b)
	{
		int carry = 0;
		int len = max(n, b.n);
		Complex c;
		c.n = len;
		for (int i = 0; i < len; i++)
		{
			c.a[i] = a[i] + b.a[i] + carry;
			if (c.a[i] >= 10)
			{
				c.a[i] -= 10;
				carry = 1;
			}
			else
			{
				carry = 0;
			}
		}
		if (carry == 1)
		{
			c.a[len] = carry;
			c.n = len + 1;
		}
		return c;
	}
	Complex operator *(const Complex& b)
	{
		int carry = 0;
		//int len = min(n, b.n);
		Complex c;
		//c.n = len;
	
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < b.n; j++)
			{
				c.a[i + j] += a[i] * b.a[j];
				c.a[i + j + 1] += c.a[i + j] / 10;
				c.a[i + j] %= 10;
			}
		}
		c.n = n + b.n;
		if (c.a[c.n] != 0)
		{
			c.n++;
		}
		while (c.a[c.n-1]==0&&c.n>1) c.n--;
		return c;
	}
};
char x1[2010], x2[2010];
int main()
{
	cin >> x1 >> x2;
	int len1 = strlen(x1);
	int len2 = strlen(x2);
	//Complex result = Complex(x1, len1) + Complex(x2, len2);
	Complex result = Complex(x1, len1) * Complex(x2, len2);
	cout << result << endl;
	return 0;
}
2022/3/28 20:18
加载中...