前言:
现在姐妹们对“c语言两个数的除法”都比较着重,兄弟们都想要学习一些“c语言两个数的除法”的相关文章。那么小编同时在网络上汇集了一些有关“c语言两个数的除法””的相关文章,希望大家能喜欢,姐妹们快快来学习一下吧!一、超大数除法的关键是怎样试商?怎样判断是否除完了?为了减少运算次数,有意让试商稍微小一点,最后一次性判断是否除完了。程序如下:
二、程序:
//超大数除法(超大数:是指超过计算机处理范围的非负整数)
#include <stdio.h>
#include <string.h>
#define N 100 //常数N应大于数据的最大位数
int main ()
{ char bc[N],cc[N]; //定义字符串数组:被除数串bc,除数串cc
int b[N]={},c[N]={},s[N]={},y[N*2]={}; //整数数组:被除数b,除数c,商s,余数y
int lb,lc,l,x,i,k; //被除数长lb,除数长lc,商长度l,循环变量x,i,k
int ss,jw,xj; //试商ss,进位jw,新积xj
//一) 输入:
printf("请连续输入被除数:");gets(bc);
printf("请连续输入除数:");gets(cc);
//二) 转换:
lb=strlen(bc);lc=strlen(cc); //测长
for(x=1;x<=lb;x++){y[x]=bc[lb-x]-48;} /*被除数字符串转换成整数*/
for(x=1;x<=lc;x++){c[x]=cc[lc-x]-48;} /*除数字符串转换成整数*/
//三) 运算:
for(i=lb;i>=lc;i--) //A.定首位(从高位起除):
{ y[i] +=y[i+1]*10;y[i+1]=0; //上次余数合并到本次
s[i]=0;
while(y[i]>c[lc]) //B.相除(够除才除)
{ ss=(y[i]*10+y[i-1])/(c[lc]*10+c[lc-1]+1); //1.试商ss(一次看两位,+1为防商过大)
if(ss==0)ss=1; //因被除数大于除数,故至少商1
jw=0;s[i]+=ss; //进位jw置0,累加商s
for(k=1;k<=lc-1;k++) //2.核心运算(从低位到高位):
{ xj=c[k]*ss+jw; //求新积
if(xj>=10){jw=xj/10;xj%=10;} else jw=0; //求积的进位及本位
l=k+i-lc; //定位:通过l把k与i联系起来
if(y[l]<xj) {y[l]+=10;y[l+1]--;} //借1当10
y[l]-=xj; //相减
}
xj=c[lc]*ss+jw;
y[i]-=xj; //最高位相减
}
}
while(y[lc]>=c[lc]) //C.后续处理:
{ for(x=lc;x>=1;x--) //a.逐位比较余数与除数:
{ if(y[x]>c[x])break; //1.遇到大的,退出内循环:去减一遍
if(y[x]<c[x]){goto tc;} //2.遇到小的(说明除完了),退出外循环
}
s[lc]++; //b.再减一遍(商加1)
for(x=1;x<=lc;x++) //没有中途跳转,说明余数 >= 除数,再减一遍
{ if(y[x]<c[x]){y[x]+=10;y[x+1]--;} //借位
y[x]-=c[x]; //相减
}
}tc:
for(x=lc;x<=lb-1;x++) //D.处理商进位:
{ s[x+1]+=s[x]/10; //求进位
s[x]%=10; //求本位
}
if(s[lb]==0) lb--; //处理商首位的0:
//四) 输出:
printf("%s/%s=",bc,cc); //1.输出商:
for(x=lb;x>=lc;x--)
{ if((x-lc+1)%3==0&&x!=lb)printf(","); //每3位加一个","
printf("%d",s[x]); //逐位输出商
}
printf("余数为:"); //2.输出余数:
for(x=lc;x>=1;x--)
{ if(y[x]!=0||x==1) {lc=x;break;} //截掉余数前面的0
}
for(x=lc;x>=1;x--)
{ if(x%3==0&&x!=lc) printf(","); //每3位加一个","
printf("%d",y[x]); //2).逐位输出余数
}
}
三、不同点:
超大数加、减、乘、除算法的不同主要表现在:结果保存、运算顺序、对齐方式、进位方式四个方面,具体是:
1 结果保存不同:加减法的运算结果直接保存在被算数(被加数或被减数)数组b[]中;而乘法的结果需要新增一个积数组j[]保存;除法用数组s[]保存商,用数组y[]保存余数。
2 运算顺序不同:加、减、乘都采用由低位到高位的顺序进行运算,而除法采用由高位到低位的顺序进行运算。
3 对齐方式不同:加减法对齐方式是固定的,所以只用一重循环就能完成运算,而乘除法对齐方式是移位往复式的,所以乘法运算需要两重循环,除法就更复杂了。
4 进位方式不同:加法的进位是显式的只需要一个变量jw即可(减法不够减时需要退位),乘法的进位隐含在积数组j[]中;除法中的进位也是显式的(商与除数相乘时需要进位)。
标签: #c语言两个数的除法 #c语言两个数的除法怎么算 #c语言两个数的除法怎么表示