您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页高精度运算pascal

高精度运算pascal

来源:好走旅游网
高精度运算

在实际中,我们常常需要进行一些很大的数的运算。但是我们知道,计算机中整数的范围是有限的,这时候,我们就需要用到所谓的高精度运算。 通俗地讲,高精度运算就是用一个数组来表示整数,用模拟人解竖式的方法进行计算。  用一个整型数组表示一个数,其中数组的每一个元素表示数的一位。第一个元素表示个位,第二个元素表示十位,以此类推。另外还需要一个变量来存放这个数的长度,通常把这个长度存放在数组下标为0的元素中。 多余的元素要设成0。

高精度加法 从个位开始,依次相加。注意进位。 两个数相加,和的长度有可能大于其中任何一个数,因此要注意最后正确设置和的长度。 A[i]=a[i]+b[i],若a[i]>9 则 dec(a[i],10), inc(a[I+1]); 17532+2349=19881  17532 + 2349 --------------  19881

program gjdplus(input,output); var st:string;

x,y:array[0..101]of integer; i,j,l1,l2:integer; begin

assign(input,'gjdplus.in'); reset(input); readln(st);

fillchar(x,sizeof(x),0); fillchar(y,sizeof(y),0); l1:=length(st);

for i:=l1 downto 1 do

x[l1-i]:=ord(st[i])-ord('0'); readln(st); l2:=length(st);

for j:=l2 downto 1 do y[l2-j]:=ord(st[j])-ord('0'); close(input);

if l1x[i]:=x[i]+y[i];

if x[i]>=10 then begin

inc(x[i+1]); dec(x[i],10); end; end;

while x[l1]<>0 do inc(l1); assign(output,'gjdplus.out'); rewrite(output);

for i:=l1-1 downto 0 do write(x[i]); close(output); end.

高精度减法 从个位开始,依次相减。有借位时向上一位借位。 两个数相减,差的长度有可能小于其中任何一个数,因此要注意最后正确设置差的长度。 这里不考虑出现小数减大数的情况。

A[i]x,y:array[0..101]of integer; i,j,l1,l2:integer; begin

assign(input,'gjdplus.in'); reset(input); readln(st);

fillchar(x,sizeof(x),0); fillchar(y,sizeof(y),0); l1:=length(st);

for i:=l1 downto 1 do

x[l1-i]:=ord(st[i])-ord('0'); readln(st); l2:=length(st);

for j:=l2 downto 1 do y[l2-j]:=ord(st[j])-ord('0'); close(input); for i:=0 to l1 do begin if x[i] dec(x[i+1]); inc(x[i],10); end;

x[i]:=x[i]-y[i]; end;

while (x[l1]=0)and(l1>0) do dec(l1); assign(output,'gjdplus.out'); rewrite(output);

for i:=l1 downto 0 do write(x[i]); close(output); end.

第29课 高精度乘法

乘法相对来说要麻烦一些,但其本质思想仍然是一样的。 注意:乘法在累加的时候,进位可能大于1。因此要采用不同的进位方法。 532*349=185668 532 * 349 -------------- 4788 2128 1596 -------------- 185668

program gjdj(input,output); var st:string;

x,y,c:array[0..101]of integer; i,j,temp,l1,l2,l3,k:integer; begin

readln(st); l1:=length(st);

for i:=l1 downto 1 do x[l1-i+1]:=ord(st[i])-ord('0'); readln(st); l2:=length(st);

for j:=l2 downto 1 do y[l2-j+1]:=ord(st[j])-ord('0'); close(input);

for j:=1 to l2 do for i:=1 to l1 do begin

inc(c[i+j-1],x[i]*y[j]); inc(c[i+j],c[i+j-1]div 10); c[i+j-1]:=c[i+j-1] mod 10;

end;

k:=l1+l2+1;

while (k>1) and (c[k]=0)do dec(k); assign(output,'gjdplus.out'); rewrite(output); for i:=k downto 1 do write(c[i]); close(output); end.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务