2 条题解

  • 0
    @ 2022-12-4 11:36:16

    提交者:@

    啊,我终于AC了!!!

    这题没什么好解释了吧。。。

    高精度模板题

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    struct BIG
    {
    	string s;
    	long long x[10010];
    	int len;
    	void change()
    	{
    		cin>>s;
    		len=s.length();
    		for(int i=1;i<=len;i++)x[len-i+1]=s[i-1]-'0';
    	}
    	void print()
    	{
    		for(int i=len;i>0;i--)cout<<x[i];
    	}
    	bool operator>(const BIG &a)
    	{
    		if(len!=a.len)return len>a.len;
    		for(int i=len;i>=1;i--)
    		if(x[i]!=a.x[i]) return x[i]>a.x[i];
    		return false;
    	}
    	bool operator<(const BIG &a)
    	{
    		if(len!=a.len)return len<a.len;
    		for(int i=len;i>=1;i--)
    		if(x[i]!=a.x[i])return x[i]<a.x[i];
    		return false;
    	}
    	BIG operator+(const BIG &a)
    	{
    		BIG c;
    		c.len=max(len,a.len);
    		int u=0;
    		for(int i=1;i<=c.len;i++)
    		{
    			int t=u;
    			if(i<=a.len)t+=a.x[i];
    			if(i<=len)t+=x[i];
    			c.x[i]=t%10;
    			u=t/10;
    		}
    		if(u>0)c.x[++c.len]=u;
    		return c;
    	}
    	BIG operator-(const BIG &a)
    	{
    		BIG c;
    		c.len=max(len,a.len);
    		int u=0;
    		for(int i=1;i<=c.len;i++)
    		{
    			int t=x[i]-u;
    			if(i<=a.len)t-=a.x[i];
    			if(t<0)c.x[i]=t+10,u=1;
    			else c.x[i]=t,u=0;
    		}
    		while(c.x[c.len]==0&&c.len>1)--c.len;
    		return c;
    	}
    	BIG operator*(const int &a)
    	{
    		BIG c;
    		c.len=len;
    		int u=0;
    		for(int i=1;i<=c.len;i++)
    		{
    			c.x[i]=x[i]*a;
    			c.x[i]+=u;
    			u=c.x[i]/10;
    			c.x[i]%=10;
    		}
    		while(u)
    		{
    			c.x[++c.len]=u%10;
    			u/=10;
    		}
    		return c;
    	}
    	BIG operator*(const BIG &a)
    	{
    		BIG c;
    		c.len=a.len+len-1;
    		int u=0;
    		for(int i=1;i<=len;i++)
    		{
    			for(int j=1;j<=a.len;j++)c.x[i+j-1]+=x[i]*a.x[j];
    		}
    		for(int i=1;i<=c.len;i++)
    		{
    			c.x[i]+=u;
    			u=c.x[i]/10;
    			c.x[i]%=10;
    		}
    		while(u)
    		{
    			c.x[++c.len]=u%10;
    			u/=10;
    		}
    		while(c.x[c.len]==0&&c.len>1)--c.len;
    		return c;
    	}
    };
    BIG a,b,c,ans;
    char x;
    signed main(int argc,char **argv)
    {
    	a.change();
    	cin>>x;
    	if(x=='+')
    	{
    		b.change();
    		ans=a+b;
    	}
    	else if(x=='-')
    	{
    		b.change();
    		ans=a-b;
    	}
    	else
    	{
    		b.change();
    		ans=a*b;
    	}
    	ans.print();
    	return 0;
    }
    

    出题人有一个数据点错了。。已更正

    114514 * 114514
    
    13113456196
    
    • @ 2023-9-20 19:29:34

      不如封装个类,顺便加个构造函数?

信息

ID
3
时间
1000ms
内存
256MiB
难度
6
标签
递交数
40
已通过
13
上传者