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 :)
bài của bạn đây =>
http://pascalvn.com/showthread.php?tid=10&pid=10#pid10
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)
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.
lỗi rồi các bạn sang đây xem nhé
http://pascalvn.com/showthread.php?tid=10&pid=10#pid10
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.