这道题让我怀疑人生(AC必关)
查看原帖
这道题让我怀疑人生(AC必关)
1387512
caozhihan楼主2024/9/7 22:07

高精除高精,结果第一步就没了 高精度减法程序不能用了! 我的高精度减法程序:

#include <bits/stdc++.h>
using namespace std; 
string x,y;
int a[1000001],b[1000001],c[1000001],t[1000001],lent;
int main()
{
	long long i,j,k,l,p=0,lena,lenb,len;
	cin>>x;
	cin>>y; 
	for(i=0;i<x.size();i++) a[i+1]=x[i]-'0';
	for(j=0;j<y.size();j++) b[j+1]=y[j]-'0';
	lena=i;lenb=j;
	len=max(lena,lenb);
	bool s=false;
	if(lena<lenb) s=true;
	else if(lena==lenb)
	{
		i=1;
		while(a[i]==b[i]&&i<=len)
		{
			i++;
		}
		if(b[i]==a[i]) 
		{
			cout<<0;
			return 0;
		}
		if(b[i]>a[i]) s=true; 
	}
	if(s)
	{
		for(i=1;i<=lena;i++)
		{
			t[i]=a[i];
	    }
	    for(i=1;i<=lenb;i++)
	    {
	    	a[i]=b[i];
		}
		for(i=1;i<=lena;i++)
		{
			b[i]=t[i];
		}
		lent=lena;
		lena=lenb;
		lenb=lent;
	}
	if(lena<len)
	{
		l=len;
		a[len]=a[lena];
		a[lena]=0;
		for(k=lena-1;k>=1;k--)
		{
			a[l-1]=a[k];
			a[k]=0;
			l--;
		}
	}
	if(lenb<len)
	{
		l=len;
		b[len]=b[lenb];
		b[lenb]=0;
		for(k=lenb-1;k>=1;k--)
		{
			b[l-1]=b[k];
			b[k]=0;
			l--;
		}
	}
	for(i=len;i>=1;i--)
	{
		if(a[i]<b[i])
		{
			a[i-1]--;
			a[i]+=10;
		}
		c[i]=a[i]-b[i]; 
	}
	if(s) cout<<"-";
	bool z=false;
	for(i=1;i<=len;i++)
	{
		if(z||c[i]!=0)
		{
			cout<<c[i];
			z=true;
		}
	}
	return 0;
}
 

我已经废掉的高精度除法:

#include <bits/stdc++.h>
using namespace std; 
string SUB (string x,string y);
int main()
{
	cout<<SUB("10000","10");
}
string SUB (string x,string y)
{
	string ans;
	int a[1000001],b[1000001],c[1000001],t[1000001];
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        memset(t,0,sizeof(t));
	long long i,j,k,l,p=0,lena,lenb,len,lent;
	for(i=0;i<x.size();i++) a[i+1]=x[i]-'0';
	for(j=0;j<y.size();j++) b[j+1]=y[j]-'0';
	lena=i;lenb=j;
	len=max(lena,lenb);
	bool s=false;
	if(lena<lenb) s=true;
	else if(lena==lenb)
	{
		i=1;
		while(a[i]==b[i]&&i<=len)
		{
			i++;
		}
		if(b[i]==a[i]) 
		{
			cout<<0;
			return 0;
		}
		if(b[i]>a[i]) s=true; 
	}
	if(s)
	{
		for(i=1;i<=lena;i++)
		{
			t[i]=a[i];
	    }
	    for(i=1;i<=lenb;i++)
	    {
	    	a[i]=b[i];
		}
		for(i=1;i<=lena;i++)
		{
			b[i]=t[i];
		}
		lent=lena;
		lena=lenb;
		lenb=lent;
	}
	if(lena<len)
	{
		l=len;
		a[len]=a[lena];
		a[lena]=0;
		for(k=lena-1;k>=1;k--)
		{
			a[l-1]=a[k];
			a[k]=0;
			l--;
		}
	}
	if(lenb<len)
	{
		l=len;
		b[len]=b[lenb];
		b[lenb]=0;
		for(k=lenb-1;k>=1;k--)
		{
			b[l-1]=b[k];
			b[k]=0;
			l--;
		}
	}
	for(i=len;i>=1;i--)
	{
		if(a[i]<b[i])
		{
			a[i-1]--;
			a[i]+=10;
		}
		c[i]=a[i]-b[i]; 
	}
	if(s) ans+="-";
	bool z=false;
	for(i=1;i<=len;i++)
	{
		if(z||c[i]!=0)
		{
			ans+=c[i]+'0';
			z=true;
		}
	}
	return ans;
}

直接死循环——(10000和10用于测试) 救命呀救命呀

2024/9/7 22:07
加载中...