高精度除法(高精除高精)

#include
using namespace std;
int a[1000],b[1000];
int len1,len2,len;
int index;
int re[1000],p=0;	//记录结果 
int judge()
{
	int i,j;
	for(i=len2-1,j=len1-1;i>=0;i--,j--)
	{
		if(a[j]<b[i])
		return 1;
		else if(a[j]>b[i])
		return 0;
		else
		continue;
	}
	return 0;
}
int main()
{
	string n,m;
	while(cin>>n>>m)
	{
		index=1;
		memset(re,0,sizeof(re));
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		int i,j;
		for(i=0;i<n.size();i++)		//倒序存储 
		{
			a[n.size()-1-i]=n[i]-'0';
		}
		for(i=0;i<m.size();i++)
		{
			b[m.size()-1-i]=m[i]-'0';
		}
		len1=n.size();
		len2=m.size();
		index=len1-len2;
		int time=index+1; 
		if(len1==len2&&judge()||len1<len2)
		{
			cout<<0<<endl;
			continue;
		}
		if(b[0]==0)
		{
			cout<<0<<endl;
			continue;
		}
		while(index>=0)			//index相当于除数先与被除数的相同数位对应,例如除数有两位,那么它先与被除数的头两位对应 
		{	
			if(judge())			 
			{
				if(a[len1-1]==0)		//之前被除数的数位减去除数的数位 ,使得最后一位变为零,那么将数组a的长度减一,再修正index 
				{
					len1--;
					if(index!=len1-len2)
					{
						index=len1-len2;
						p++;
					}
					if(index<0)
					break;
				}
				if(judge()&&len1-index==len2)		//将被除数与除数的对应数位比较,如除数先与被除数头两位比较,若除数大,则index--,模拟手算 
				{
					index--;
					p++;
					if(index<0)
					break;
				}				
			}	
			for(i=index,j=0;i<len1,j<len2;i++,j++)		//不断进行相减 
			{
				if(a[i]<b[j])
				{
					a[i]=a[i]+10-b[j];
					a[i+1]--;
				}
				else
				{
					a[i]=a[i]-b[j];
				}
			}
			re[p]++;	//相减多少次,商就变为多少 
		}
		i=0;
		while(re[i]==0)		//除去前导零 
		i++;
		for(;i<p;i++)	//输出 
		cout<<re[i];
		cout<<endl;
	}
	return 0;
 } 

你可能感兴趣的:(高精度除法(高精除高精))