资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
高精度运算高精度运算 由于待处理的数据超过了任何一种数据类型所能容纳的范由于待处理的数据超过了任何一种数据类型所能容纳的范围,因此必须采用数串形式输入,并将其转化为整数数组。该围,因此必须采用数串形式输入,并将其转化为整数数组。该数组的每一个元素对应一位十进制数,由其下标顺序指明位序数组的每一个元素对应一位十进制数,由其下标顺序指明位序号。运算规则如同算术运算。由于高精度运算的结果可能使得号。运算规则如同算术运算。由于高精度运算的结果可能使得数据长度发生增减,因此除需要用整数数组存储数据外,还需数据长度发生增减,因此除需要用整数数组存储数据外,还需要用一个整数变量记录整数数组的元素个数,即数据的实际长要用一个整数变量记录整数数组的元素个数,即数据的实际长度。度。1、高精度加法、高精度加法Str1=3210Str2=98765j对位对位相加相加进位进位以字符串形式输入加数和被加数以字符串形式输入加数和被加数用整数数组来保存加数和被加数用整数数组来保存加数和被加数ord(str1i)-ord(0)ord(str2i)-ord(0)var str1,str2:string; a,b:array1.100 of integer; l1,l2,i,j,k:integer;begin readln(str1); readln(str2); l1:=length(str1);l2:=length(str2); if l1l2 then j:=l1 else j:=l2; k:=0; for i:=l1 downto 1 do begin k:=k+1; ak:=ord(str1i)-ord(0); end; k:=0; for i:=l2 downto 1 do begin k:=k+1; bk:=ord(str2i)-ord(0); end; for i:=1 to j do begin ai:=ai+bi; if ai=10 then begin ai:=( ); ai+1:=( ); end; end; if ai+1=0 then j:=j-1; for i:=j+1 downto 1 do write(ai);end.处理进位处理进位从低位到高位依次从低位到高位依次将各位数相加将各位数相加用字符串输入用字符串输入加数和被加数加数和被加数ai-10ai+1+1用整数数组用整数数组来存放加数来存放加数用整数数组来用整数数组来存放被加数存放被加数从高位到低位输出从高位到低位输出2、高精度乘法、高精度乘法 计算计算5050!的精确值!的精确值. . 解题思路:解题思路: 50!50!是个很大的值,大约在是个很大的值,大约在10106060-10-107070左左右,显然用右,显然用PASCALPASCAL的实数和整数都是不能存储的。的实数和整数都是不能存储的。 可以用一个整数数组来表示这个大数,数组中每个元可以用一个整数数组来表示这个大数,数组中每个元素只存放一个数字。下图所示的是素只存放一个数字。下图所示的是1111!=39916800=39916800在数组在数组a a中的存储方法。中的存储方法。00861991 2 99 1003const max=100; n=50; var a:array1.max of integer; i,j,k,x:integer;begin k:=max; ak:=1; 初值为初值为1 for i:=2 to n do求求i! begin x:=0; 来自低位的进位来自低位的进位 for j:=max downto k do begin x:=x+aj*i; aj:=( ); x:=( ); end; while x0 do 处理最后一位进位处理最后一位进位 begin ( ); ak:=x mod 10; x:=x div 10; end end; for i:=( )do write(ai:1)end.x mod 10x div 10k:=k-1k to max8 4 7 2 3 2 5 4 1 1 6 9 41 9 4 8 1X:=0X:=0X:= X:= aiai*bjbj+ x div 10+ ci+j-1+ x div 10+ ci+j-1 ci+j-1:= x mod 10ci+j-1:= x mod 10var s1,s2:string; a,b:array1.100of integer; c:array1.200of integer; la,lb,lc, i,j,x:integer;begin readln(s1); readln(s2); la:=length(s1); lb:=length(s2); lc:=la+lb; 积的位数为积的位数为la+lb-1或者或者la+lb位位 for i:=la downto 1 do ala-i+1:=ord(s1i)-ord(0); for i:=lb downto 1 do blb-i+1:=ord(s2i)-ord(0); for i:=lc downto 1 do ci:=0; for i:=1 to la do begin x:=0; 赋初值赋初值 for j:=1 to lb do begin x:=ai*bj+x div 10+ci+j-1; ci+j-1:= x mod 10; end; ci+j:= x div 10; end; while (clc=0) and (lc1) do lc:=lc-1; for i:=lc downto 1 do write(ci);end.
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号