C++编程《第09课 大整数的除法问题》教学课件.pptxVIP

  • 1
  • 0
  • 约1.81千字
  • 约 22页
  • 2026-03-11 发布于广西
  • 举报

C++编程《第09课 大整数的除法问题》教学课件.pptx

第09课;学习目标;知识讲授;大整数的除法由于运算顺序和复杂度的原因,不得不采用与其他计算不同的大整数存储方式。高精度数除以普通数字,采取的方法是模拟竖式除法的按位相除法而且不采用倒序转存方式,但第0位置仍然用来存储位数;

#includeiostream

#includecstring

#includecstdio

usingnamespacestd;

intmain(){

chara1[100];

inta[100],c[100],lena,i,x=0,lenc,b;

memset(a,0,sizeof(a));

memset(c,0,sizeof(c));

gets(a1);

cinb;

lena=strlen(a1);

for(i=0;i=lena-1;i++)

a[i+1]=a1[i]-48;;;;大整数运算很麻烦,但如果只是需要做大整数t除以某个一位数g的余数时,我们可以采用余数定理,避开高精度计算。

示例:

1*10+2=12

12*10+4=124

124*10+4=1244

按照乘以10,加一个数位这两个步骤不停迭代,能够得到整数t。这个过程中,我们进行“取余数”运算,根据余数定理,就可以在过程中取到最终的余数。

例如1244%9=138......2

可以这样计算1244%9=(((1*10)+2)%9*10+4)%9*10+4)%9

=((12%9*10+4)%9*10+4)%9=(34%9*10+4)%9

=74%9=2;;;#includeiostream

#includecstring

usingnamespacestd;

inta[101],b[101],c[101],d,i;

voidinit(inta[])

{strings;

cins;//读入字符串s

a[0]=s.length();//用a[0]计算字符串s的位数

for(i=1;i=a[0];i++)

a[i]=s[a[0]-i]-0;//将数串s转换为数组a,并倒序存储.

}

;;intcompare(inta[],intb[])

//比较a和b的大小关系,若ab则为1,ab则为-1,a=b则为0

{inti;

if(a[0]b[0])return1;//a的位数大于b则a比b大

if(a[0]b[0])return-1;//a的位数小于b则a比b小

for(i=a[0];i0;i--){//从高位到低位比较

if(a[i]b[i])return1;

if(a[i]b[i])return-1;

}

return0;//各位都相等则两数相等。

};;voidchugao(inta[],intb[],intc[])

{

inttmp[101];

c[0]=a[0]-b[0]+1;

for(inti=c[0];i0;i--)

{

memset(tmp,0,sizeof(tmp));//数组清零

numcpy(b,tmp,i);

while(compare(a,tmp)=0){c[i]++;jian(a,tmp);}//用减法来模拟

}

while(c[0]0c[c[0]]==0)c[0]--;

return;

};;课堂练习;练习一:天使的起誓

;练习一:天使的起誓

;练习二:求a/b的高精度数值;小结;作业;同学们加油

文档评论(0)

1亿VIP精品文档

相关文档