求pascal高精度加減乘除的標程

時間 2022-04-07 06:29:25

1樓:匿名使用者

剛剛才寫的,望採納,謝謝~~

program hd;

type

hdtype=integer;

arr=array[1..1000] of hdtype;

hdreal=record

zs:arr;

xs:arr;

kz:longint;

kx:longint;

end;

vars1,s2:string;

a,b,c:arr;

ka,kb,kc,k:longint;

i,j:longint;

t1:longint;

f:boolean;

hr:hdreal;

function strtoint(s:string):longint;

vart,c:longint;

begin

val(s,t,c);

exit(t);

end;

procedure hdswap(var a,b:arr;var k1,k2:longint);

varta:arr;

tk:longint;

begin

ta:=a;

a:=b;

b:=ta;

tk:=k1;

k1:=k2;

k2:=tk;

end;

function conv2hd(s:string):arr;

vari,k:longint;

t:arr;

begin

k:=length(s);

fillchar(t,sizeof(t),0);

for i:=1 to length(s) do t[i]:=ord(s[length(s)-i+1])-48;

conv2hd:=t;

end;

function conv2str(a:arr;k:longint):string;

vari:longint;

t:string;

begin

for i:=k downto 1 do t:=t+chr(a[i]+48);

conv2str:=t;

end;

procedure hdplus(a,b:arr;var c:arr;k1,k2:longint;var k3:longint);

vark,i:longint;

begin

if k1>k2 then k:=k1 else k:=k2;

for i:=1 to k do

begin

a[i]:=b[i]+a[i];

a[i+1]:=a[i+1]+a[i] div 10;

a[i]:=a[i] mod 10;

end;

if a[k+1]<>0 then k:=k+1;

c:=a;

k3:=k;

end;

procedure hdminus(a,b:arr;var c:arr;k1,k2:longint;var k3:longint;f:boolean);

vark,i:longint;

begin

if not f then hdswap(a,b,k1,k2);

if k1>k2 then k:=k1 else k:=k2;

for i:=1 to k do

begin

if b[i]>a[i] then begin dec(a[i+1]); a[i]:=a[i]+10 end;

a[i]:=a[i]-b[i];

end;

while (a[k]=0) and (k>1) do dec(k);

c:=a;

k3:=k;

end;

procedure hdsinglemul(a:arr;var c:arr;n2,k:longint;var k3:longint);

vari:longint;

begin

for i:=1 to k do a[i]:=a[i]*n2;

for i:=1 to k-1 do begin a[i+1]:=a[i+1]+a[i] div 10; a[i]:=a[i] mod 10; end;

while a[k]>10 do

begin

a[k+1]:=a[k+1]+a[k] div 10; a[k]:=a[k] mod 10;

inc(k);

end;

k3:=k;

c:=a;

end;

function larger(a,b:arr;k1,k2:longint):boolean;

vari:longint;

begin

if k1>k2 then exit(true) else if k1b[i] then exit(true)

else if a[i]

larger:=true;

end;

function getsym(f:boolean):string;

begin

if not f then exit('-') else exit('');

end;

procedure hdmul(a,b:arr;var c:arr;k1,k2:longint;var k3:longint);

vari,j:longint;

begin

for j:=1 to k2 do for i:=1 to k1 do c[i+j-1]:=c[i+j-1]+a[i]*b[j];

for i:=1 to k1+k2 do begin c[i+1]:=c[i+1] + c[i] div 10; c[i]:=c[i] mod 10; end;

k3:=k1+k2;

while c[k3]=0 do dec(k3);

end;

function hdreal2string(n:hdreal):string;

vari:longint;

r:string;

begin

r:='';

for i:=n.kz downto 1 do r:=r+chr(n.zs[i]+48);

if n.kx=0 then exit(r);

r:=r+'.';

for i:=1 to n.kx do r:=r+chr(n.xs[i]+48);

if r[0]='.' then r:='0'+r;

hdreal2string:=r;

end;

procedure hddiv(a,b:longint;var c:hdreal);

varys:longint;

zs:longint;

s1:string;

s2:string;

p:longint;

begin

zs:=a div b;

str(zs,s1);

c.zs:=conv2hd(s1);

c.kz:=length(s1);

ys:=a mod b;

if ys=0 then exit;

while c.kx<1000 do

begin

inc(c.kx);

ys:=ys*10;

c.xs[c.kx]:=ys div b;

ys:=ys mod b;

if ys=0 then exit;

end;

end;

begin

readln(s1);

readln(s2);

fillchar(a,sizeof(a),0);

fillchar(b,sizeof(b),0);

fillchar(c,sizeof(c),0);

a:=conv2hd(s1);

b:=conv2hd(s2);

ka:=1000;

while a[ka]=0 do dec(ka);

kb:=1000;

while b[kb]=0 do dec(kb);

kc:=0;

hdplus(a,b,c,ka,kb,kc);

writeln(s1,'+',s2,'=',conv2str(c,kc));

f:=larger(a,b,ka,kb);

hdminus(a,b,c,ka,kb,kc,f);

writeln(s1,'-',s2,'=',getsym(f),conv2str(c,kc));

if length(s2)<5 then

begin

val(s2,t1,kc);

hdsinglemul(a,c,t1,ka,kc);

endelse

hdmul(a,b,c,ka,kb,kc);

writeln(s1,'*',s2,'=',conv2str(c,kc));

if (length(s1)<=7) and (length(s2)<=7) then

begin

hddiv(strtoint(s1),strtoint(s2),hr);

writeln(s1,'/',s2,'=',hdreal2string(hr));

end;

end.

PASCAL高精度階乘怎麼做,最多求100的階乘和

const max 100 vara array 1.max of integer i,j,k,x,n integer begin readln n k max a k 1 for i 2 to n do begin x 0 for j max downto k dobegin x x a j i ...

高精度kk軸承空轉怎麼加強,高精度KK軸承空轉怎麼加強

通過洗軸可以加強軸承空轉或者更換軸承也行,考慮用zippo火機油洗,實在找不到買家用潤滑油a也行。軸承 軸承bearing,用於確定旋轉軸與其他零件相對運動位置,起支承或導向作用的零部件。它的主要功能是支撐機械旋轉體,用以降低裝置在傳動過程中的機械載荷摩擦係數。按運動元件摩擦性質的不同,軸承可分為滾...

全自動高精度交流穩壓器,高精度全自動交流穩壓器,是幹嘛用的

若真是高精度全自動交流穩壓器對電腦沒有什麼影響 1500w的完全可以穩壓2台台試電腦和路由器 moden 因為2台台試電腦和路由器 moden的功率也不過幾百瓦 弘翼電源 1500kva的穩壓器最大負載為1200kw,配兩台電腦和路由器和moden多多有餘。完全沒有任何問題!穩壓器就是為裝置提供穩定...

機器高精度工作原理

我不是學機械的我是學電的。但是我了解一些。首先機械本身可以做到用機器結合,本身鎖得就比較死,齒輪間不是那麼容易亂動的。另外在控制方面,有一種電機專門用來做高精度的工作,步進電機。它可以一精確到電機軸按幾分之一轉 當然這是跟據電機造法不同搞出來的 用程式來程式設計控制拍數,就可以控制行進距離。電機和機...

什麼掃瞄器的掃瞄精度高,掃瞄器是可以高精度的掃瞄嗎?

結構光的是面掃瞄,雷射的是線掃瞄 在掃瞄時結構光要比雷射的快,精度高 雷射的可以直接掃瞄大型的物體,白光要借助於攝影測量系統來完成對大物體的測量。你可以看看中晶的bio 6000,它除了擁有超快速的膠體 膠片掃瞄速度,它還配備了光學解析度3200 x 6400 dpi 的ccd 48位的色彩深度,專...