Pascal

Modified: Wednesday, 22-12-2021 07:00 AM

Bài toán: Cộng hai số siêu lớn. Mỗi số có không quá 3x10^4 chữ số.

Dữ liệu vào:

- Dòng 1: Số chữ số của số A
- Dòng 2: Các chữ số của số A
- Dòng 3: Số chữ số của số B
- Dòng 4: Các chữ số của số B

Dữ liệu ra:

- Dòng 1: Số chữ số của kết quả
- Dòng 2: Các chữ số của kết quả

 

Input Output
6
6 4 2 6 5 7 
7
6 0 0 1 5 0 5
7
6 6 4 4 1 6 2 

 


Code Gen Number: Tạo Test cho bài toán

Uses sysutils;
var x,y,i:integer;
    f:text;
    s:ansistring;
begin
    assign(f,'input.txt');
    rewrite(f);
    readln(x,y);
    randomize;
    s := '';
    s := IntToStr(random(9)+1) + #32;
    for i := 2 to x do 
        s := s + IntToStr(random(10)) + #32;
    writeln(f,x);
    writeln(f,s);
    s := '';
    s := IntToStr(random(9)+1) + #32;
    for i := 2 to y do 
        s := s + IntToStr(random(10)) + #32;
    writeln(f,y);
    writeln(f,s);
    close(f);
    write('Done!');
    readln;
end.

Code giải bài toán:

var a,b:array[1..30000]of byte;
    x,y:integer;
// Nhap du lieu
procedure Input;
var f:text;
    i:integer;
begin
    assign(f,'input.txt');
    reset(f);
    readln(f,x);
    for i:= 1 to x do
        read(f,a[x-i+1]);
    readln(f,y);
    for i:= 1 to y do
        read(f,b[y-i+1]);
    close(f);
end;

procedure Output;
var f:text;
    i:integer;
    k,val:byte;
    c:array[1..30000] of byte;
// Xuat du lieu
begin
    assign(f,'output.txt');
    rewrite(f);
    k:=0;
    if (x < y) then 
        x := y;
    for i:=1 to x do 
    begin
        val := a[i]+b[i]+k;
        c[i]:= val mod 10;
        k := val div 10;
    end;    
    if (k=1) then
    begin 
        inc(x);
        c[x]:=1;
    end;
    writeln(f,x);
    for i:=x downto 1 do 
        write(f,c[i], #32);
    close(f);
end;

// Main
begin
    Input;
    Output;
    write('Done!');
    readln;
end.