大整数除法,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;
}

 因为是第一次写blog,代码没有给出注释,如果你在浏览时有什么疑问,请在下方留言。如果需要交流请直接给我发消息,若需转载请注明,谢谢!*^_^*

posted @ 2015-01-16 00:31  诀别诗  Views(1553)  Comments(1Edit  收藏  举报