社区讨论

5.6re

P1480A/B Problem(高精度除法Ⅰ)参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mjh8hdby
此快照首次捕获于
2025/12/22 22:10
3 个月前
此快照最后确认于
2025/12/25 18:25
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
int a[101],b[101],c[202],na,nb;
string s;
bool szma(int x[],int y[])
{
	int n1=x[0];
	int n2=y[0];
	if(n1<n2)return 0;
	if(n1>n2)return 1;
	for(int i=n1;i>=1;i--)
	{
		if(x[i]<y[i])return 0;
		if(x[i]>y[i])return 1;
	}
	return 1;
}

void jian(int x[],int y[])
{
	for(int i=1;i<=x[0];i++)
	{
		if(x[i]<y[i])
		{
			x[i+1]-=1;
			x[i]+=10;
		}
		x[i]=x[i]-y[i];
	}
	while(x[0]>1&&x[x[0]]==0)
	{
		x[0]--;
	}
}

bool dengy(int x[],int y[])
{
	int n1=x[0];
	int n2=y[0];
	if(n1!=n2)return 0;
	for(int i=n1;i>=1;i--)
	{
		if(x[i]!=y[i])return 0;
	}
	return 1;
}

void cry(int x[],int y[],int q)
{
	for(int i=1;i<=x[0];i++)
	{
		y[i+q]=x[i];
	}
	y[0]=x[0]+q;
}

int main()
{
	memset(c,0,sizeof(c));
	cin>>s;
	a[0]=s.length();
	for(int i=1;i<=a[0];i++)
	{
		a[i]=s[a[0]-i]-'0';
	}
	
	cin>>s;
	b[0]=s.length();
	for(int i=1;i<=b[0];i++)
	{
		b[i]=s[b[0]-i]-'0';
	}
	c[0]=max(1,a[0]-b[0]+1);
	
	if(dengy(a,b))
	{
		cout<<"1";
		return 0;
	}
	if(!szma(a,b))
	{
		cout<<"0";
		return 0;
	}
	int t[202];
	for(int i=c[0];i>=1;i--)
	{
		memset(t,0,sizeof(t));
		cry(b,t,i-1);
		while(szma(a,t))
		{
			jian(a,t); 
			c[i]++;
			if(c[i]>=10)break;
		}
	}
	
	while(c[0]>1&&c[c[0]]==0)
	{
		c[0]--;
	}
	
	for(int i=c[0];i>=1;i--)
	{
		cout<<c[i];
	}cout<<'\n';
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...