NOIP奥复习四.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NOIP奥复习四

问题分析及算法设计 一、高精度计算问题 二、排列组合问题 三、分治算法问题 四、回溯算法问题 五、动态规划问题;高精度计算 一、高精度计算问题 高精度计算中需要处理好以下几个问题: ( 1 ) 数据的接收方法和存贮方法  数据的接收和存贮:当输入的数很长时,可采用字符串方式输入,这样可输入数字很长的数,利用字符串函数和操作运算,将每一位数取出,存入数组中。另一种方法是直接用循环加数组方法输入数据。 ( 2 ) 计算结果位数的确定  位数的确定:利用对数函数; L=trunc(log(x)/log(10))+1,定义数组 A〔 L〕; ( 3 ) 进位、借位处理    进位、借位处理: 加法进位: A[I:= A[I]+B[I],若A[I]>10则 A[I]:=A[I]-10,A[I+1]:=A[I+1]+1 减法借位: 若A[I]<B[I]则A[I+1]:=A[I+1]-1  A[I]:=A[I]+10,A[I]:=A[I]-B[I] ;乘???进位: Y:=A[I]×B[I]+C,C:=Y DIV 10   A[I]:=Y-C×10 (4) 商和余数的求法   商和余数处理:视被除数和除数的位数情况进行处理。 例题1、高精度乘法运算。 分析: (1) 数据的接收用字符串方式 ; (2) 位数的确定:设被乘数为A,乘数为B,它们的位数分别是L1,L2,所以积的位数最长是:L1+L2;;(3) 进位处理: 乘法进位 Y=A[I]*B[I]+C, C=Y DIV 10, A[I]= Y MOD 10; 加法进位 Program p12_11 ; const n=200; var a, b : array[1..n] of integer ; c : array [1..2*n+1] of integer ; str1 , str2 : string; L1, L2, i, j, x, y, w :integer; begin write ( input string str1,str2 : ); readln (str1); readln (str2); ;L1:=Length(str1); L2:=Length(str2);{ 求两个字符串的长度 } For i:=L1 downto 1 do a[L1-i+1 ]:=ord (str1[i])-ord(0 ); for i:=L2 downto 1 do b[L2-i+1]:=ord (str2[i])-ord(0); for i:=1 to L1 do for j:= 1 to L2 do begin x:=a[i]*b[j] ; y:=x div 10; z:=x mod 10 ; w:=i+j-1 ; c[w]:=c[w]+z ;  { 处理本位 } c[w+1]:=c[w+1]+c[w] div 10 +y ; { 处理进位 }; ec[w]:=c[w] mod 10 ; end; { 两数相乘,精确取高精度计算的每一位 } E:=L1+L2; While C[E]=0 then E:=E-1 ; { 处理最高位有否进位问题 } write( str1,’* ,str2,= ); for i:=e downto 1 do write (c[i]); writeln; end. 当输入 str1=123456789, str2=987654321 时, 其结果是: 123456789*123456789 =121932631112635269;例题2 、求 N! 的精确值。 分析: N!=1*2*3*4......* N,如 10!=1*2*3*4......*10, 用 高精度算法求出每一位数,其算法如下: (1) 确定位数:N!=N*(N-1)*(N-2)…*3*2*1  根据数学知识可知N!的位数是:  L=trunc(1/lg10(lnN+ln(N-1)+......ln3+ln2+ln1))+1; 然后每位数占用一个数组单

文档评论(0)

yy558933 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档