带负数高精度加法
  • 板块学术版
  • 楼主pd_up2now
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/8/30 17:22
  • 上次更新2023/11/4 08:32:25
查看原帖
带负数高精度加法
516190
pd_up2now楼主2021/8/30 17:22
#include <iostream>
#include <string>
#include <algorithm>
#define maxn 10010
using namespace std;
struct bigint
{
	int value[maxn],len;
	bigint(string s)
	{
		len=s.length();
		for(int i=s.length()-1,j=1;i>=0;i--,j++)
			value[j]=s[i]-'0';
	}
	bigint() {}
	int &operator[](int i)
	{
		return value[i];
	}
	void print()
	{
		for(;!value[len];)
			len--;
		for(int i=max(1,len);i>=1;i--)
			cout<<value[i];
		return;
	}
};
bool operator<(bigint a,bigint b)
{
	if(a.len!=b.len)
		return a.len<b.len;
	for(int i=a.len;i>=1;i--)
	{
		if(a[i]!=b[i])
			return a[i]<b[i];
	}
	return false;
}
bigint operator+(bigint a,bigint b)
{
	bigint c;
	c.len=max(a.len,b.len);
	for(int i=1;i<=max(a.len,b.len);i++)
	{
		c[i]+=a[i]+b[i];
		c[i+1]=c[i]/10;
		c[i]%=10;
	}
	if(c[c.len+1])
		c.len++;
	return c;
}
bigint operator-(bigint a,bigint b)
{
	bigint c;
	c.len=max(a.len,b.len);
	if(a<b)
	{
		bigint t;
		t=a;
		a=b;
		b=t;
		cout<<"-";
	}
	for(int i=1;i<=a.len;i++)
	{
		c[i]+=a[i]-b[i];		
		if(c[i]<0) 
		{
			c[i]+=10;
			c[i+1]-=1; 
		}
	}
	return c;
}
int main()
{
	string s1,s2;
	cin>>s1>>s2;
	if(s1[0]!='-'&&s2[0]!='-')
	{
		bigint a(s1),b(s2);
		(a+b).print();
		return 0;
	}
	if(s1[0]=='-'&&s2[0]!='-')
	{
		s1.erase(s1.begin());
		bigint a(s1),b(s2);
		(b-a).print();
		return 0;
	}
	if(s1[0]!='-'&&s2[0]=='-')
	{
		s2.erase(s2.begin());
		bigint a(s1),b(s2);
		(a-b).print();
		return 0;
	}
	if(s1[0]=='-'&&s2[0]=='-')
	{
		s1.erase(s1.begin());
		s2.erase(s2.begin());
		bigint a(s1),b(s2);
		cout<<"-";
		(a+b).print();
		return 0;
	}
} 

别的OJ有三个点WA

2021/8/30 17:22
加载中...