基本算法
以358934760892734899+38960302975237462為例:
1、計算結果的位數
358934760892734899共18位
38960302975237462 共17位
故結果不會超過19位。
2、將要計算的數字分割成多段,按照順序排列(這裡以0-32767作為每一存儲單位存儲的數的限制):
35 | 8934 | 7608 | 9273 | 4899 |
3 | 8960 | 3029 | 7523 | 7462 |
3、將兩數相加。
​ | 35 | 8934 | 7608 | 9273 | 4899 |
---|---|---|---|---|---|
​ | 3 | 8960 | 3029 | 7523 | 7462 |
和(不進位) | 38 | 17894 | 10637 | 16796 | 12361 |
和(進位後) | 39 | 7895 | 0638 | 6797 | 2361 |
從高位到低位依次輸出。除最高位以外,其他低位上不足4位的要在前面補上0。
pascal程式
var
a,b,c:array[1..201] of 0..9;
n:string;
lena,LenB,lenc,i,x:integer;
begin
write('Input augend:');
readln(n);
lena:=length(n);
for i:=1 to lena do a[lena-i+1]:=ord(n)-ord('0');{加數放入a數組}
write('Input addend:');
readln(n);
lenb:=length(n);
for i:=1 to lenb do b[lenb-i+1]:=ord(n)-ord('0');{被加數放入b數組}
i:=1;
while (i<=lena) or(i<=lenb) do
begin
x := a + b + x div 10; {兩數相加,然後加前次進位}
c := x mod 10; {保存第i位的值}
i := i + 1
end;
if x>=10 {處理最高進位}
then
begin
lenc:=i;
c:=1
end
else lenc:=i-1;
for i:=lenc downto 1 do write(c);
writeln {輸出結果}
end.