算法流程:
第一步,讀入被除數 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;i<a_length;i++)
a[i]=temporary_a[a_length-i-1]-'0';
scanf("%s",temporary_b);
b_length=strlen(temporary_b);
for(int i=0;i<b_length;i++)
b[i]=temporary_b[b_length-i-1]-'0';
if(a_length<b_length||a_length==b_length&&strcmp(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;j<b_length;j++)
product[i+j]+=answer[i]*b[j],
product[i+j+1]=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+j<product_length;j++)
temporary_a[j]=product[product_length-j-1]+'0';
for(int j=0;i+j<remainder_length;j++)
temporary_b[j]=remainder[remainder_length-j-1]+'0';
}
if(product_length<remainder_length||product_length==remainder_length&&strcmp(temporary_a,temporary_b)<=0)
break;
}
if(answer[i]!=0)
{
for(int j=i;j<remainder_length;j++)
remainder[j]-=product[j]-10,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;
}