PDA

View Full Version : Tính tổng của 2 số cực lớn



lehang_gb1
13-12-2011, 21:37
Tính tổng của 2 số cực lớn(mỗi số không ít hơn 45 chữ số}

Farmer_Boy
13-12-2011, 21:40
xài xâu rồi cộng theo cách thông thường

bvnguyen
13-12-2011, 22:23
quy sang chuỗi, rồi dùng các hàm tách chuỗi này nọ, cộng theo kiểu ngày xưa học cộng vậy, sáu cộng sáu bằng mười hai, viết hai nhớ một ... chính xác là bao nhiu số cũng cộng được chứ không chỉ 45 số đâu :)

raicars
13-12-2011, 23:14
bài của bạn đây =>
http://pascalvn.com/showthread.php?tid=10&pid=10#pid10

hcvtpt
19-12-2011, 15:05
Thuật toán: Sử dụng chuỗi
B1: Đồng nhất độ dài của 2 chuỗi bằng cách thêm số 0 vào đầu chuỗi ngắn
B2: Cộng từng phần tử từ cuối xâu về đâu (khi cộng dùng thủ val chuyển ký tự thành chuỗi và cộng xong dùng thủ tục str chuyển ngược lại số thành ký tự chuyển vào xâu kết quả (chú ý nếu 1 vị trí cộng quá 9 thì dùng hàm mod lấy phần đơn vị thôi, phần chữ số hàng chục cộng vào nhớ của số cộng tiếp theo)

raicars
22-12-2011, 12:17
bài của bạn đây =>

NGUỒN : HTTP://PASCALVN.COM



program cong_mang;
var a,b,c:array[0..1000] of shortint;
max,n,m:integer;
procedure nhap;
var i:integer;
begin
write('nhap m,n=');readln(m,n);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);c:=b;
for i:=1 to m do
begin
write('a[',i,']=');readln(a[i]);
end;
for i:=1 to n do
begin
write('c[',i,']=');readln(c[i]);
end;
end;
procedure xuli;
var sodu,nho,tong,i:integer;
begin
if m>n then max:=m else max:=n;
if m>n then for i:=max downto (m-n+1) do b[i]:=c[i-m+n] else
for i:=max downto (n-m+1) do b[i]:=c[i-n+m];
nho:=0;
for i:=max downto 1 do
begin
tong:=a[i]+b[i]+nho;
sodu:=tong mod 10;
nho:=tong div 10;
c[i]:=sodu;
end;
c[0]:=nho;
end;
procedure xuat;
var i:integer;
begin
if c[0]<>0 then for i:=0 to max do write(c[i])
else for i:=1 to max do write(c[i]);
end;
begin
nhap;
xuli;
xuat;
readln;
end.

raicars
22-12-2011, 12:18
lỗi rồi các bạn sang đây xem nhé

http://pascalvn.com/showthread.php?tid=10&pid=10#pid10