主题:高精度加法!!50分!!!
Lovely哆啦
[专家分:1360] 发布于 2007-07-24 09:29:00
高精度加法!!50分!!!
回复列表 (共4个回复)
沙发
bigchen [专家分:1940] 发布于 2007-07-24 10:34:00
1、读入两个字符串,并求长度,找最长的长度;
2、初始化a,b两数组每个单元为0;并取出字符串中的每位数由低位到高位存入相应的数组。
3、处理部分:
for i:=1 to j do
begin {j为两个字符串中最长的一个长度}
a[i]:=a[i]+b[i];
if a[i]>=10 then begin a[i]:=a[i]-10; a[i+1]:=a[i+1]+1; end ;
end;
4、输出:从高位向低位输出。
板凳
bigchen [专家分:1940] 发布于 2007-07-24 10:36:00
program gj_jia(input,output);
var str1,str2:string;i,a1,b1:integer;a,b:array[1..256]of integer;
begin
readln(str1);readln(str2); a1:=length(str1);b1:=length(str2);
for i:=1 to 256 do begin a[i]:=0;b[i]:=0;end;
for i:=1 to a1 do a[a1-i+1]:=ord(str1[i])-ord('0');
for i:=1 to b1 do b[b1-i+1]:=ord(str2[i])-ord('0');
if a1<b1 then a1:=b1;
for i:=1 to a1 do
begin
a[i]:=a[i]+b[i];if a[i]>=10 then
begin a[i]:=a[i]-10;a[i+1]:=a[i+1]+1;end;
end;
if a[a1+1]>0 then a1:=a1+1;
for i:=a1 downto 1 do write(a[i]);
end.
这个是参考程序。
3 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-24 16:49:00
thank you!!!
4 楼
Matodied [专家分:7560] 发布于 2007-07-24 21:02:00
TYPE arr = ARRAY[1..127] OF INTEGER;
VAR
a, b, s: arr; x, y: STRING[126];
i, lx, ly, l, k, t: INTEGER;
BEGIN
READLN(x);
READLN(y);
lx := LENGTH(x); ly := LENGTH(y);
IF lx > ly THEN l := lx ELSE l := ly;
FOR i:=1 TO lx DO VAL(COPY(x, lx + 1 - i, 1), a[i], k);
FOR i:=1 TO ly DO VAL(COPY(y, ly + 1 - i, 1), b[i], k);
FOR i:=1 TO l DO BEGIN
s[i] := s[i] + a[i] + b[i];
IF s[i] >= 10 THEN BEGIN
s[i + 1] := 1; s[i] := s[i] MOD 10;
END;
END;
IF s[l + 1] = 0 THEN t := l ELSE t := l + 1;
FOR i:=t DOWNTO 1 DO WRITE(s[i]);
END.
我来回复