36高精除求救
查看原帖
36高精除求救
1064318
Prefectmakesprefect楼主2025/2/3 18:57
#include<bits/stdc++.h>
#define int long long

using namespace std;

string a,b;

int lea,leb,an[5005],bn[5005],cn[5005],dn[5005];

bool greater_eq(int dn[],int bn[],int last_dg,int len)
{
	if(dn[last_dg+len]!=0)	return true;
	for(int i=len-1;i>=0;i--)
	{
		if(dn[last_dg]>bn[i])	return true;
		if(dn[last_dg]<bn[i])	return false;
	}
	return true;
}

void clear(int a[]) {
  for (int i = 0; i < 5005; ++i) a[i] = 0;
}

void div(int an[],int bn[],int cn[],int dn[])
{
	clear(cn);
	clear(dn);
	int la,lb;
	for(la=5003;la>0;la--)
		if(an[la-1]!=0)	break;
	for(lb=5003;lb>0;lb--)
		if(bn[lb-1]!=0)	break;
	
	for(int i=0;i<la;i++)	dn[i]=an[i];
	for(int i=la-lb;i>=0;i--)
	{
		while(greater_eq(dn, bn, i, lb))
		{
			for (int j = 0; j < lb; ++j) 
			{
        		dn[i + j] -= bn[j];
        		if (dn[i + j] < 0) 
				{
           			dn[i + j + 1] -= 1;
          		    dn[i + j] += 10;
        		}	
      		}
      		cn[i]+=1;
		}	
	}
}

void print(int cn[])
{
	int i;
	for(i=5005;i>=1;i--)
	{
		if(cn[i]!=0)	break;
	}
	for(;i>=0;i--)	cout<<cn[i];
}

signed main(){
	cin>>a>>b;
	lea=a.size();
	leb=b.size();
	clear(an);
	for(int i=0;i<lea;i++)
	{
		an[lea-i-1]=a[i]-'0';
	}	
	clear(bn);
	for(int i=0;i<leb;i++)
	{
		bn[leb-i-1]=b[i]-'0';
	}
	div(an,bn,cn,dn);
	print(cn);
	return 0;
}
2025/2/3 18:57
加载中...