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

先貼一個簡單的高精度除以單精度的:ios

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
	char a[510];
	int c[510]; 
	int b,l;
	while (~scanf("%s%d",&a,&b))
	{
		memset(c,0,sizeof(c)); 
		l=strlen(a);
		int ys=0;
		int t=0,i;
		for (i=0;i<l;i++)
		{
			if (a[i]-'0'+10*ys>=b)
			{
				c[t]=(a[i]-'0'+10*ys)/b;
				ys=(a[i]-'0'+10*ys)%b;
				t++;
			}
			else ys=ys*10+a[i]-'0';
		}
		while (c[i]==0) i--;
		for (int j=i;j>=0;j--)
			printf("%d",c[j]);
		if (ys) printf(" %d",ys);
			printf("\n");
	}
	return 0;
}


 

而後就是高精度除以高精度了,原理利用高精度減法求商吧...很蛋疼的是各類數據OK,就是AC不了,不知道爲何,哪位指出錯誤,感謝...spa

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char c[510];
int ff(char a[510],char b[510])
{
	int cc[510];
	int la,lb,k; 
	memset(cc,0,sizeof(cc));
	la=strlen(a)-1;
	lb=strlen(b)-1;
	k=la+1;
	int t=0;
	while (k--)
	{
		if (lb>=0)
		cc[t]=(a[la--]-b[lb--]);
		else 
		cc[t]=a[la--]-'0';
		if (cc[t]<0)
		{
			a[la]--;
			cc[t]+=10;
		}
		t++;
	}
	while (cc[t]==0) t--;
	int ff=t;
	memset(c,0,sizeof(c));
	for (int j=t;j>=0;j--)
	c[ff-j]=cc[j]+'0';
	c[ff+1]='\0';
	return ff+1;
}
int main()
{
	char a[510],b[510],f[510];
	while (cin>>a>>b)
	{
		int num=0,T=0;
		int la=strlen(a);
		int lb=strlen(b);
		if (la<lb || la==lb && strcmp(a,b)<0)
			cout<<"0"<<" "<<a<<endl;
		else 
		{
			int i;
			for (i=0;i<lb;i++)
				c[i]=a[i];
			c[i]='\0';
			if (strcmp(c,b)<0)
				{
					c[i++]=a[i];
					c[i]='\0'; 
				} 
			while (i<=la)
			{
				int h;
				while (1)
				{
					num++;
					h=ff(c,b);
					if (strlen(c)<strlen(b) || strlen(c)==strlen(b) && strcmp(c,b)<0)
						break;
				}
				f[T++]=num+'0';
				num=0;
				while (1)
				{
					c[h++]=a[i];
					c[h]='\0';
					int j=0;
					while (c[0] =='0' && strlen(c)!=1)  
    				{
        				for(j=0;j<strlen(c);j++)  
            			c[j]=c[j+1];  
    				}
					i++;
					if (strlen(c)>strlen(b) ||(strlen(c)==strlen(b) && strcmp(c,b)>=0) || i==la+1)
						break;
					f[T++]='0';
				}
			}
			f[T++]='\0';
			cout<<f<<" ";
			int l=strlen(c)-1;
			while (c[l]-'0'==0) l--;
			if (l+1)
			cout<<c<<endl;
			else 
			cout<<endl;
		}
	}
	return 0;
}