1、高精度计算利用计算机进行数值计算,有时会遇到这样的问题,有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,但因受到硬件条件的限制,往往达不到实际问题所要求的精度,我们可以利用高精度计算的方法来实现更高精度计算的目的。高精度计算中需要处理好以下几个问题:(1) 数据的接收方法和存贮方法 当输入的数很长时,可采用字符串方式输入,这样可输入数字很长的数,利用字符串函数和操作运算,将每一位数取出,存入数组中;另一种方法是直接用循环数组方法输入数据。(2) 进位、借位的处理加法进位:ai:=ai+bi;ai+1:=ai+1+ai div 10; ai:=ai m
2、od 10;减法借位:if ai0 then inc(len);for i:=len downto 1 do writeln(ai);end;二、 高精度减法程序For i:=1 to len doBegin if ai0 then begin inc(len);alen:=c;For i:=len downto 1 do write(ai);(2)多精度与多精度乘法Program p4;Const n=100;Var a,b:array1n of integer;C:array12*n+1 of integer;Len1,len2,I,j,x,y,w:integer;BeginReadln(
3、str1);readln(str2);Len1:=length(str1);len2:=length(str2);For i:=1 to len1 do alen1+1-i:=ord(str1i)-ord(0);For i:=1 to len2 do blen2+1-i:=ord(str2i)-ord(0);For i:=1 to len1 doFor j:=1 to len2 doBegin x:=ai*bj;Y:=x div 10;z:=x mod 10; w:=i+j-1;cw:=cw+z;cw+1:=cw+1+cw div 10+y;cw:=cw mod 10end;e:=len1+l
4、en2;while ce=0 then e:=e-1;for i:=e downto 1 do write(ci);end.当输入 str1=123456789,str2=987654321 时,结果是:121932631112635269四、加大进制的方法前面所介绍的各种方法都是以十进制为基础的,当数很大时,为了加快速度,可以采用100 或 10000 进制或更大的进制的方法。除了进制有所变化外,算法没有什么变化。例 1、 求 n!的精确值。分析:n!=1*2*3*.*n,算法如下:(1) 确定位数:len=trunc(1/ln10(lnn+ln(n-1)+.+ln3+ln2+ln1)+1;
5、(2) 每位数占用一个数组单元,每个单元存放四位数,内存可节省到 1/4;(3) 进位处理,进位的条件是存储单元的数是否大于 9999;(4) 输出处理:将各单元的数顺序输出,但若该单元不是最高位且不足四位数则在需要在前面补 0,凑成四位数。Program p6;Const m=200;Var a:array1m of integer;I,j,y,c,n,k,t:integer; F:real;BeginRead(n);F:=0;For i:=1 to n do f:=f+log(i)log(10);T:=trunk(f)+1;A1:=1;len:=1;k:=1;For i:=1 to n d
6、oBegin c:=0;While ak=0 do inc(k);For j:=k to len doBegin y:=ai*i+c;C:=y div 1000;Ai:=y mod 1000End;If c0 then begin inc(len);alen:=c end;End;For i:=len downto 1 doBegin if i=1 then write(ai)Else begin str(ai,st1);While length(st1)3 do st1:=0+st1;Write(st1);End;End;End.当 n=10,10!=3628800;当 n=15,15!=1307674368000练习:1、正月里,鼠妈鼠爸生了 12 只小鼠,于是大小鼠共有 14 只,二月里,两 代鼠全部配对,每对鼠又各生了 12 只小鼠,因此共有鼠 98 只。如这样下去每月所有的鼠全部配对,每对鼠又各生 12 只小鼠,十二个月后,鼠的总数是多少呢?2、用高精度计算出 s=1!+2!+3!+.+n!(n=50),输入正整数 n,输出计算结果 s.3、正实数加法计算,读入两个 100 位长的正实数,求出它们的和。4、麦森数