高精度除高精度

算法流程:
第一步,读入被除数 a 和 除数 b,判断是否 a < b,是则输出 0 并结束算法,否则令 answer := 0;
第二步,令余数 remainder := 0,令 i 从被除数最高位的下标开始;
第三步,令 remainder := remainder * 10 + a[i],令 c := 9;
第四步,判断是否 b * c > remainder(高乘单),是则 c := c - 1 转第四步;
第五步,answer = answer * 10 + c,remainder = remainder - b * c(高减高),i 右移一位;
第六步,判断是否 i 溢出,否则转第三步;
第七步,输出 answer。

代码如下:

#include"stdio.h"
#include"string.h"
#define MAX_SIZE 505
char temporary_a[MAX_SIZE],temporary_b[MAX_SIZE];
int a[MAX_SIZE],answer[MAX_SIZE],b[MAX_SIZE],product[MAX_SIZE],remainder[MAX_SIZE];
int main()
{
    //freopen("HighDivide.in","r",stdin);
    //freopen("HighDivide.out","w",stdout);
    int a_length,b_length,product_length,remainder_length;
    scanf("%s",temporary_a);
    a_length=remainder_length=strlen(temporary_a);
    for(int i=0;i1]-'0';
    scanf("%s",temporary_b);
    b_length=strlen(temporary_b);
    for(int i=0;i1]-'0';
    if(a_lengthstrcmp(temporary_a,temporary_b)<0)
    {
        printf("0");
        return 0;
    }
    for(int i=a_length-1;i>=0;i--)
    {
        remainder[i]=a[i];
        for(answer[i]=9;answer[i]>0;answer[i]--)
        {
            product[i]=0;
            product_length=b_length+i;
            for(int j=0;j1]=product[i+j]/10,
                product[i+j]%=10;
            if(product[product_length]!=0)
                product_length++;
            if(product_length==remainder_length)
            {
                memset(temporary_a,'0',sizeof(temporary_a));
                memset(temporary_b,'0',sizeof(temporary_b));
                for(int j=0;i+j1]+'0';
                for(int j=0;i+j1]+'0';
            }
            if(product_lengthstrcmp(temporary_a,temporary_b)<=0)
                break;
        }
        if(answer[i]!=0)
        {
            for(int j=i;j10,remainder[j+1]-=1-remainder[j]/10,remainder[j]%=10;
            for(;remainder_length>i&&remainder[remainder_length-1]==0;remainder_length--);
        }
    }
    if(answer[a_length-b_length]==0)
        a_length--;
    for(int i=a_length-b_length;i>=0;i--)
        printf("%d",answer[i]);
    return 0;
}

你可能感兴趣的:(算法)