首页 > 代码库 > 大整数除法,C语言基础语法实现
大整数除法,C语言基础语法实现
#include<stdio.h>
#include<string.h>
#define N 2004
void change(char c[],int n[]);
int Sub(int *a,int *b,int lena,int lenb);
int main()
{
char x[N],y[N];
int a[N]={0},b[N]={0};
scanf("%s %s",x,y);
change(x,a);
change(y,b);
int lena=strlen(x);
int lenb=strlen(y);
int ans[N]={0};
if(lena<lenb)
printf("0\n");
else
{
int s=Sub(a,b,lena,lenb);
if(s<0)
printf("0\n");
else if(s==0)
printf("1\n");
else
{
int i,j;
lena=s;
ans[0]++;
int ntimes=lena-lenb;
for(i=lena;i>=0;i--)
if(i>=ntimes)
b[i]=b[i-ntimes];
else
b[i]=0;
lenb=lena;
for(j=0;j<=ntimes;j++)
{
int buffer;
while(1)
{
buffer=Sub(a,b+j,lena,lenb-j);
if(buffer<0)
break;
ans[ntimes-j]++;
lena=buffer;
}
}
for(i=0;i<=ntimes;i++)
if(ans[i]>9)
{
ans[i+1]+=ans[i]/10;
ans[i]=ans[i]%10;
}
for(i=ntimes;i>=0;i--)
printf("%d",ans[i]);
printf("\n");
}
}
return 0;
}
void change(char c[],int n[])
{
int i,j=0;
for(i=strlen(c)-1;i>=0;i--)
n[j++]=c[i]-‘0‘;
}
int Sub(int *a,int *b,int lena,int lenb)
{
int i,f=0;
if(lena<lenb)
return -1;
else if(lenb==lena)
{
for(i=lena-1;i>=0;i--)
{
if(a[i]<b[i])
return -1;
else if(a[i]>b[i])
break;
}
}
for(i=0;i<lena;i++)
{
a[i]-=b[i];
if(a[i]<0)
{
a[i]+=10;
a[i+1]--;
}
}
for(i=lena-1;i>=0;i--)
{
if(a[i]!=0)
return i+1;
}
return 0;
}
若转载,请注明,谢谢!
大整数除法,C语言基础语法实现