回 帖 发 新 帖 刷新版面

主题:高精度加法!!50分!!!

高精度加法!!50分!!!

回复列表 (共4个回复)

沙发

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、输出:从高位向低位输出。

板凳

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 楼

thank you!!!

4 楼

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.

我来回复

您尚未登录,请登录后再回复。点此登录或注册