c语言多位数除法,大数除法 C语言

这篇博客深入解析了大数除法的核心思想,即通过将除法转换为减法来实现。文章通过实例展示了如何用除数的位首不断减去被除数,并记录减法次数,直到除数位尾无法再减,从而完成除法运算。此外,还提供了一段C语言代码来实现这一过程。
摘要由CSDN通过智能技术生成

看大数除法有点苦逼,找了好几篇博客,都感觉难以理解,今天终于弄懂了

大数除法的核心:把除法运算转化为减法运算,根据除法运算的特点,

不停的用除数位首(从除数第一位开始与被除数位数相等的那几位)减去被除数,直到除数位首小于被除数,

将次数保存在数组里,然后在被除数的的前面添一个0继续相减,

按照以上方法继续运算,直到除数位尾(从除数最后一位开始与被除数位数相等的那几位)相减之后即可结束。

例子如下:除数446,被除数23

代码如下:

#include

#include

#define M 1000005

char s1[M],s2[M];

int a[M];

void ss(int m)//减运算

{

int i=0,j;

while(1)

{

if(s1[i]=='0') i++;

else

{

j=i;

break;

}

}

for(; i

s1[i]=s1[i]-s2[i]+'0';

for(i=m-1; i>j; i--)

if(s1[i]

{

s1[i]+=10;;

s1[i-1]--;

}

}

int main()

{

int i,j,k,n,m;

while(~scanf("%s%s",s1,s2))

{

n=strlen(s1);

m=strlen(s2);

if(n

{

printf("0 余数=");//求余数

for(i=0; i

printf("%d",s1[i]-'0');

printf("\n");

continue;

}

k=0;

while(1)

{

a[k]=0;

while(strcmp(s1,s2)>=0)//一直进行减法,直到不能减为止

{

ss(m);

a[k]++;

}

k++;

if(n==m) break;

for(i=m-1; i>=0; i--) //在s2前面补0,以便进行减法运算

s2[i+1]=s2[i];

s2[0]='0';

m++;

s2[m]='\0';//strcmp()函数遇到字符'\0'结束

}

i=0;

while(a[i]==0) i++;//去除前导0

for(; i

printf("%d",a[i]);

printf(" 余数=");

j=0;//求余数

while(s1[j]=='0') j++;

if(j==n)

{

printf("0\n");

continue;

}

for(; j

printf("%d",s1[j]-'0');

printf("\n");

}

return 0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值