最基本的高精度的加法思路还是比较容易想到的,不过该算法要考虑的地方还是比较多的,比如:
Pascal代码:
- 字符倒置
- 加法运算时的进位
- 多余数字的处理
- 运算后数字的长度

Pascal代码:
- program p1039;
- type
- intarray = array[1..251] of byte;
- var
- s1,s2:string[250];
- code,len:integer;
- a,b,res:intarray;
- { * 转置并转换为整数数组 * }
- procedure revolve(var inta:intarray; s:string[250]);
- var
- i,tmp:byte;
- begin
- tmp:=length(s);
- for i:=1 to tmp do
- val(copy(s,tmp-i+1,1),inta[i],code);
- end;
- { * 处理多余数字 * }
- procedure remain(lmin,lmax,x:byte;which:intarray);
- var
- i:byte;
- begin
- for i:=lmin+1 to lmax do
- begin
- res[i]:=(which[i]+x) mod 10;
- x:=(which[i]+x) div 10;
- len:=i
- end;
- if x>0 then
- begin
- len:=len+1;
- res[len]:=x;
- end;
- end;
- { * 加法,并处理多余数字 * }
- procedure addx();
- var
- i,lena,lenb,x:byte;
- begin
- lena:=length(s1);
- lenb:=length(s2);
- if lena>lenb then
- len:=lenb
- else
- len:=lena;
- x:=0;
- for i:=1 to len do
- begin
- res[i]:=(a[i]+b[i]+x) mod 10;
- x:=(a[i]+b[i]+x) div 10
- end;
- if lena>lenb then
- remain(lenb,lena,x,a);
- if lena<lenb then
- remain(lena,lenb,x,b);
- if (lena=lenb) and (x>0) then
- begin
- len:=len+1;
- res[len]:=x;
- end;
- end;
- { * 反向输出 * }
- procedure print();
- var
- i:byte;
- begin
- for i:=len downto 1 do
- write(res[i]);
- writeln;
- end;
- { * main * }
- begin
- readln(s1);
- readln(s2);
- revolve(a,s1);
- revolve(b,s2);
- addx();
- print();
- end.