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.