加减乘过了,除和取余求调!
查看原帖
加减乘过了,除和取余求调!
1395165
xywuyu楼主2024/11/8 20:33
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[10001],b[10001],x,len,c[10001];
void in(int a[],string s)
{
	a[0]=s.size();
	for (int i=1;i<=a[0];i++)
	a[i]=s[a[0]-i]-'0';
	return ;
}
int jia(string s1,string s2)
{int n;
for (int i=0;i<s1.size();i++)
{a[s1.size()-i-1]=s1[i]-'0';}
for (int i=0;i<s2.size();i++)
{b[s2.size()-i-1]=s2[i]-'0';}
n=s1.size();
if (s2.size()>s1.size())
{n=s2.size();}
for (int i=0;i<n;i++)
{c[i]+=a[i]+b[i];
if (c[i]>=10)
{c[i+1]+=1;
c[i]-=10;}}
if (c[n]!=0)
{n+=1;}

for (int i=n-1;i>=0;i--)
{cout<<c[i];}
cout<<"\n";

return 0;}

int cheng(string a1, string b1)
{
    
    int lena=a1.size();
	int lenb=b1.size();
    for(int i=1;i<=lena;i++)a[i]=a1[lena-i]-'0';
    for(int i=1;i<=lenb;i++)b[i]=b1[lenb-i]-'0';
	for(int i=1;i<=lenb;i++)
	for(int j=1;j<=lena;j++)
	c[i+j-1]+=a[j]*b[i];
    for(int i=1;i<lena+lenb;i++)
	if(c[i]>9)
	{
		c[i+1]+=c[i]/10;
		c[i]%=10;
	}
	len=lena+lenb;
    while(c[len]==0&&len>1)len--;
    for(int i=len;i>=1;i--)cout<<c[i];
    cout<<"\n";
    return 0;
}
int jian(string a1,string b1) 
{
	if (a1.size()<b1.size()||a1.size()==b1.size()&&a1<b1)
	{
		std::swap(a1,b1);
		cout<<"-";
	}
	int la=a1.size();
	int lb=b1.size();
	for (int i=0;i<=la-1;i++)
	a[la-i]=int(a1[i]-'0');
	for (int i=0;i<=lb-1;i++)
	b[lb-i]=int(b1[i]-'0');
	int y;
	while (y<=la||y<=lb)
	{
		if (a[y]<b[y])
		{
			a[y]+=10;
			a[y+1]--;
		}
		c[y]=a[y]-b[y];
		y++;
	}
	int lc=y;
	while (c[lc]==0&&lc>1)
	lc--;
	for (int i=lc;i>=1;i--)
	cout<<c[i];
	cout<<"\n";
	return 0;
}
int co(int a[],int b[])
{
	
	if (a[0]>b[0])return 1;
	if (a[0]<b[0])return -1;
	for (int j=a[0];j>0;j--)
	{
		if (a[j]>b[j])return 1;
		if (a[j]<b[j])return -1;
	}
	return 0;
}
void jian1(int a[],int b[]) 
{
	int f,i;
	f=co(a,b);
	if (f==0)
	{
		a[0]=0; return ;
	}
	if (f==1)
	{
		for (i=1;i<=a[0];i++)
		{
			if (a[i]<b[i])
			{
				a[i+1]--;a[i]+=10;
			}
			a[i]-=b[i];
		}
		while (a[i]>0&&a[a[0]]==0)
		a[0]--;
		return ;
	}
	}
	
void r(int a[])
{
	int i;
	if (a[0]==0)
	{
		cout<<"0\n";return ;
	}
	for (i=a[0];i>0;i--)cout<<a[i];
	cout<<"\n";
	return ;
}

void nu(int p[],int q[],int det)
{
	for (int i=1;i<=p[0];i++) q[i+det-1]=p[i];
	q[0]=p[0]+det-1;
	
}
void chu(int a[],int b[],int c[])
{
	int t[10002];
	c[0]=a[0]-b[0]+1;
	for (int i=c[0];i>0;i--)
	{
		memset(t,0,sizeof(t));
		nu(b,t,i);
		while (co(a,t)>=0)
		{
			c[i]++;
			jian1(a,t);
		}
		
	}
	while (c[0]>0&&c[c[0]]==0)c[0]--;
	
	return ;
}
int main()
{
getline(cin, s1);
getline(cin, s2);
jia(s1,s2);
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
jian(s1,s2);
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
cheng(s1,s2);
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
in(a,s1);
in(b,s2);
chu(a,b,c);
r(c);
r(a);
return 0;}

2024/11/8 20:33
加载中...