Problem5505--[数值问题]高精度加法

5505: [数值问题]高精度加法

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MB

Description

高精度加法(highplus/c/cpp) 

【问题描述】 

输入两个高精度正整数a和b(a,b的位数<=200),求这两个数的和

【输入格式】

输入共两行,分别为a和b

【输出格式】

输出共一行,表示两个数的和。

【输入样例1】 
1111111111111111111111111111111111
9999999999999999999999999999999999


【输出样例1】

11111111111111111111111111111111110


HINT

Const
    SIZE = 200+1;

Type
    hugeint = Record
        len : Integer;
        num : Array[1..SIZE] Of Integer;
    End;
var a,b:hugeint;
    s1,s2:string;
    i:integer;
procedure add(a, b : hugeint);
    Var
        i : Integer;
        ans : hugeint;
    Begin
        FillChar(ans.num, SizeOf(ans.num), 0);
        If a.len > b.len
            Then ans.len := a.len
            Else ans.len := b.len;
        For i := 1 To ans.len Do
            Begin
                ans.num[i] :=ans.num[i]+a.num[i]+b.num[i];
                ans.num[i + 1] := ans.num[i + 1] + ans.num[i] DIV 10;
                ans.num[i] := ans.num[i] MOD 10;
            End;
        If ans.num[ans.len + 1] > 0
            Then Inc(ans.len);
        for i:=ans.len downto 1 do write(ans.num[i]);
        writeln;
    End;


   procedure datain;
   begin
    assign(input,'highplus.in');  assign(output,'highplus.out');
    reset(input); rewrite(output);
    readln(s1);
    readln(s2);
    a.len:=length(s1);
    b.len:=length(s2);
    for i:=1 to a.len do  a.num[i]:=ord(s1[a.len-i+1])-ord('0');
    for i:=1 to b.len do  b.num[i]:=ord(s2[b.len-i+1])-ord('0');
   end;
   begin
    datain;
    add(a,b);
   close(input);close(output);
   end.

Source/Category