pascal高精度问题!高手进!

来源:百度知道 编辑:UC知道 时间:2024/06/15 21:25:44
我编了一个高精度减法,程序如下:
program gaojiduj;
var s,c,a,b:string;
t,l,g,i,x,y:integer;
d,e,f:array[1..9999] of integer;
begin
readln(a);
readln(b);
l:=length(a);
g:=length(b);
if l>g then
for i:=1 to l-g do
b:='0'+b;
if g>l then
for i:=1 to g-l do
a:='0'+a;
if a<b then begin
c:=a;
a:=b;
b:=c;
end;
l:=length(a);
for i:=l downto 1 do
d[i]:=ord(a[i])-48;
for i:=l downto 1 do
e[i]:=ord(b[i])-48;
for i:=l downto 1 do
begin
if d[i]<e[i] then
begin
f[i]:=d[i]+10-e[i];
d[i-1]:=d[i-1]-1;
end
else
f[i]:=d[i]-e[i];
end;
if y<>0 then
begin
f[l]:=f[l]-1;
for i:=l downto 1 do
write(f[i]);
end
else
begin
for i:=1 to l do
write(f[i]);
end;
end.
但是输入200和199,输出001。
怎么去掉前面的0??????????????????
怎么减啊?用什么函数?

你这个程序有几个问题:
1、y是什么东西?
可以把
if y<>0 then
begin
f[l]:=f[l]-1;
for i:=l downto 1 do
write(f[i]);
end
else
begin
for i:=1 to l do
write(f[i]);
end;
改为
for i:=1 to l do
write(f[i]);
2、在 if a<b then begin
c:=a;
a:=b;
b:=c;
end;
中应该为
if a<b then begin
write('-');
c:=a;
a:=b;
b:=c;
end;
3、在输出前应该插上
y:=0;
repeat
y:=y+1;
until (y=l) or (f[y]<>0);
if y<>l then for i:=y to l do
write(f[i])
else writeln('0');

高进度减法最后必须扫一遍,如果是零就要把dec(tot),直到f[tot]<>0
然后for i:=1 to tot do write(f[tot]);

最后用一个WHILE 语句
令l为你的高精度的个数,则一直减前面的0,直到最前面不为0为止