王朝知道
分享
 
 
 

Pascal 高精度运算(加、减乘、除)

王朝知道·作者佚名  2012-02-16  
宽屏版  字体: |||超大  
 
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
 
问题描述:

谁知道?

参考答案:

加:

var st:string;

x,y:array[0..101]of integer;

i,j,l1,l2:integer;

begin

write('x='); readln(st);

l1:=length(st);

for i:=0 to 101 do x[i]:=0;

for i:=l1 downto 1 do

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

write('y='); readln(st);

l2:=length(st);

for i:=0 to 101 do y[i]:=0;

for i:=l2 downto 1 do

y[l2-i]:=ord(st[i])-ord('0');

if l1<l2 then l1:=l2;

for i:=0 to l1 do

begin

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

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

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

end;

write('x+y=');

j:=101;

while x[j]=0 do j:=j-1;

for i:=j downto 0 do write(x[i]);

readln;

end.

乘:

var st1,st2:string;

x,y:array[1..200]of integer;

z: array[1..401]of integer; i,j,l1,l2,a,b,c,d:integer;

begin

write('x='); readln(st1);

l1:=length(st1);

for i:=1 to 200 do x[i]:=0;

for i:=l1 downto 1 do

x[l1+1-i]:=ord(st1[i])-ord('0');

write('y='); readln(st2);

l2:=length(st2);

for i:=1 to 200 do y[i]:=0;

for i:=l2 downto 1 do

y[l2+1-i]:=ord(st2[i])-ord('0');

for i:=1 to l1 do

for j:=1 to l2 do

begin

a:=x[i]*y[j];

b:=a div 10;

c:=a mod 10;

d:=i+j-1;{积z数组的元素号}

z[d]:=z[d]+c;

z[d+1]:=z[d+1]+z[d] div 10 + b;{进位}

z[d]:=z[d] mod 10;

end;

a:=l1+l2;;

while z[a]=0 do a:=a-1;

write(st1,’*’,st2,’=‘);

for i:=a downto 1 do write(z[i]);

writeln;

readln;

end.

差:

var st,st1,st2:string;

x,y,z:array[0..200]of byte;

i,k,s1,s2,code:integer;

begin

write('x='); readln(st1);

s1:=length(st1);

write('y='); readln(st2);

s2:=length(st2);

write(st1,’-’,st2,’=‘);

if (s1<s2)or((s1=s2)and(st1<st2)) then

begin

write(‘-’);

st:=st1;st1:=st2;st2:=st;

k:=s1;s1:=s2;s2:=k;

end;

fillchar(x,sizeof(x),0);

fillchar(y,sizeof(y),0);

fillchar(z,sizeof(z),0);

for i:=1 to s1 do val(st1[i],x[s1+1-i],code);

for i:=1 to s2 do val(st2[i],y[s2+1-i],code); for i:= 1 to s1 do

begin

if x[i]-y[i]<0 then{不够减,借位}

begin

x[i+1]:=x[i+1]-1;

x[i]:=x[i] + 10;

end;

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

end;

k:=s1;

while z[k]=0 do k:=k-1;

for i:=k downto 1 do write(z[i]);

writeln;

readln;

end.

除:

program HighPrecision3_Multiply1;

const

fn_inp='f:\hp2in.txt';

fn_out='f:\hp5out.txt';

maxlen=100; { max length of the number }

type

hp=record

len:integer; { length of the number }

s:array[1..maxlen] of integer

{ s[1] is the lowest position

s[len] 0is the highest position }

end;

var

x,y:hp;

z,w:integer;

procedure PrintHP(const p:hp);

var i:integer;

begin

for i:=p.len downto 1 do write(p.s[i]);

end;

procedure init;

var

st:string;

i:integer;

begin

assign(input,fn_inp);

reset(input);

readln(st);

x.len:=length(st);

for i:=1 to x.len do { change string to HP }

x.s[i]:=ord(st[x.len+1-i])-ord('0');

readln(z);

close(input);

end;

procedure Divide(a:hp;b:integer;var c:hp;var d:integer);

{ c:=a div b ; d:=a mod b }

var i,len:integer;

begin

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

len:=a.len;

d:=0;

for i:=len downto 1 do { from high to low }

begin

d:=d*10+a.s[i];

c.s[i]:=d div b;

d:=d mod b;

end;

while(len>1) and (c.s[len]=0) do dec(len);

c.len:=len;

end;

procedure main;

begin

Divide(x,z,y,w);

end;

procedure out;

begin

assign(output,fn_out);

rewrite(output);

PrintHP(y);

writeln;

writeln(w);

close(output);

end;

begin

init;

main;

out;

end.

高精度 6 : 除法 2 : 高精度数 / 高精度数

program HighPrecision4_Multiply2;

const

fn_inp='f:\hp2in.txt';

fn_out='f:\hp6out.txt';

maxlen=100; { max length of the number }

type

hp=record

len:integer; { length of the number }

s:array[1..maxlen] of integer

{ s[1] is the lowest position

s[len] is the highest position }

end;

var

x:array[1..2] of hp;

y,w:hp; { x:input ; y:output }

procedure PrintHP(const p:hp);

var i:integer;

begin

for i:=p.len downto 1 do write(p.s[i]);

end;

procedure init;

var

st:string;

j,i:integer;

begin

assign(input,fn_inp);

reset(input);

for j:=1 to 2 do

begin

readln(st);

x[j].len:=length(st);

for i:=1 to x[j].len do { change string to HP }

x[j].s[i]:=ord(st[x[j].len+1-i])-ord('0');

end;

close(input);

end;

procedure Subtract(a,b:hp;var c:hp); { c:=a-b, suppose a>=b }

var i,len:integer;

begin

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

if a.len>b.len then len:=a.len { get the bigger length of a,b }

else len:=b.len;

for i:=1 to len do { subtract from low to high }

begin

inc(c.s[i],a.s[i]-b.s[i]);

if (c.s[i]<0) then

begin c.s[i]:=10+c.s[i]; dec(a.s[i+1])end;

end;

c.len:=len;

end;

function Compare(const a,b:hp):integer;

var len:integer;

begin

if a.len>=b.len then len:=a.len { get the bigger length of a,b }

else len:=b.len;

while(len>0) and (a.s[len]=b.s[len]) do dec(len);

{ find a position which have a different digit }

if len=0 then compare:=0 { no difference }

else compare:=a.s[len]-b.s[len];

end;

procedure Multiply10(var a:hp); { a:=a*10 }

var i:Integer;

begin

for i:=a.len downto 1 do

a.s[i+1]:=a.s[i];

a.s[1]:=0;

inc(a.len);

while(a.len>1) and (a.s[a.len]=0) do dec(a.len);

end;

procedure Divide(a,b:hp;var c,d:hp); { c:=a div b ; d:=a mod b }

var i,j,len:integer;

begin

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

len:=a.len;

fillchar(d,sizeof(d),0);

d.len:=1;

for i:=len downto 1 do

begin

Multiply10(d);

d.s[1]:=a.s[i]; { d:=d*10+a.s[i] }

{ c.s[i]:=d div b ; d:=d mod b; }

{ while(d>=b) do begin d:=d-b;inc(c.s[i]) end }

while(compare(d,b)>=0) do

begin

Subtract(d,b,d);

inc(c.s[i]);

end;

end;

while(len>1)and(c.s[len]=0) do dec(len);

c.len:=len;

end;

procedure main;

begin

Divide(x[1],x[2],y,w);

end;

procedure out;

begin

assign(output,fn_out);

rewrite(output);

PrintHP(y);

writeln;

PrintHP(w);

writeln;

close(output);

end;

begin

init;

main;

out;

end.

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有