10分求助
查看原帖
10分求助
307895
jzy_2020011楼主2023/3/9 22:51
#include<bits/stdc++.h>
using namespace std;
bool f;
int a[1000001],b[1000001],c[10000001];
string xx,yy;
void jia()
{
	f=0;
	int i,j;
	string x=xx,y=yy;
	if(x[0]=='-')
	{
		f=!f;
		x=x.substr(1,x.size()-1);
	}
	if(y[0]=='-')
	{
		f=!f;
		y=y.substr(1,y.size()-1);
	}
	for (i=0, j=x.size()-1; i<x.size(); i++,j--) 
	{
		a[i] = x[j] - '0'; 
	} 
	for (i=0, j=y.size()-1; i<y.size(); i++,j--) 
	{ 
		b[i] = y[j] - '0'; 
	} 
	for(i=0; i<x.size() || i<y.size(); i++) 
	{ 
		c[i] += a[i] + b[i]; 
		if (c[i] > 9) 
		{ 
			c[i+1] = c[i] / 10; 
			c[i] %= 10; 
		} 
	}
	bool flag = 0; 
	for(; i>=0; i--) 
	{ 
		if(c[i] != 0 || flag) 
 		{
		  cout << c[i]; flag = 1; 
		} 
	} 
	if (!flag) cout << 0; 
	cout<<endl;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
}
void jian()
{
	string x=xx,y=yy;
    if(x.size()<y.size())
    {
        cout<<"-";
        swap(x,y);
    }
    if(x.size()==y.size())
    {
        for(int i=0;i<x.size();i++)
        {
            if(x[i]>y[i])
			{
				break;
			}
            if(x[i]<y[i])
            {
                cout<<"-";
                swap(x,y);
                break;
            }
        }
    }
	for (int i=0, j=x.size()-1; i<x.size(); i++,j--) 
	{
		a[i] = x[j] - '0'; 
	} 
	for (int i=0, j=y.size()-1; i<y.size(); i++,j--) 
	{ 
		a[i] -= y[j] - '0'; 
	} 
	for(int i=0;i<x.size()-1;i++)
	{
		if(a[i]<0)
		{
			a[i]+=abs(a[i])/10+10;
			a[i+1]-=abs(a[i])/10+1;
		}
	}
	int i=x.size();
	while(a[--i]==0);
	for(;i>=0;i--)
	{
		cout<<a[i];
	}
	cout<<endl;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
}
void cheng()
{
	f=0;
	string x=xx,y=yy;
	if(x[0]=='-')
	{
		f=!f;
		x=x.substr(1,x.size()-1);
	}
	if(y[0]=='-')
	{
		f=!f;
		y=y.substr(1,y.size()-1);
	}
	for (int i=0; i<x.size(); i++) 
	{
		a[i] = x[i] - '0'; 
	} 
	for (int i=0; i<y.size(); i++) 
	{ 
		b[i] = y[i] - '0'; 
	}
	for(int i=0;i<x.size();i++)
	{
		for(int j=0;j<y.size();j++)
		{
			c[i+j]+=a[i]*b[j];
		}
	}
	for(int i=x.size()+y.size()-2;i>0;i--)
	{
		if(c[i]>9)
		{
			c[i-1]+=c[i]/10;
			c[i]%=10;
		}
	}
	if(f) cout<<'-';
	for(int i=0;i<x.size()+y.size()-1;i++)
	{
		cout<<c[i];
	}
	cout<<endl;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
}
bool xxx(int* a,int* b,int n)
{
	if(a[n]>0) return true;
	for(int i=n-1;i>=0;i--)
	{
		if(a[i]>b[i]) 
		{
			return true;
		}
		else if(a[i]<b[i]) 
		{
			return false; 
		}
	}
	return true;
}
void chu()
{
	string x=xx,y=yy;
	int i,j,xl,yl,zl;
	xl=x.size();
	yl=y.size(); 
	zl=xl-yl;
	for(i=0;i<xl;i++) 
	{
		a[i]=x[xl-1-i]-'0'; 
	}
	for(i=0;i<yl;i++) 
	{
		b[i]=y[yl-1-i]-'0';
	}
	for(i=xl-yl;i>=0;i--)
	{
		///******重点 
		while(xxx(a+i,b,yl))//比较 
		{ 
			c[i]++; 
			for(j=0;j<=yl-1;j++)
			{
				if(a[i+j]<b[j])
				{
					a[i+j+1]--;
					a[i+j]+=10;
				}
				a[i+j]-=b[j];
			}
		}
	}
	
	while(a[xl]==0&&xl>0) xl--;
	while(c[zl]==0&&zl>0) zl--;
	
	for(i=zl;i>=0;i--) cout<<c[i];
	if(zl<0) cout<<"0";
	if(xl>1||a[0]>0)
	{
		cout<<endl;
		for(i=xl;i>=0;i--) cout<<a[i];
	} 
	else
	{
		cout<<endl;
		cout<<0;
	}
}
int main()
{
	cin>>xx>>yy;
	jia();
	jian();
	cheng();
	chu();
	return 0;
}
2023/3/9 22:51
加载中...