Sử dụng ngôn ngữ lập trình Pascal (Pree Pascal) để lập trình giải các bài toán sau:
Cho hai số nguyên dương M và N, M có p chữ số và N có q chữ số.
Yêu cầu: Tính tổng của hai số M và N.
Dữ liệu vào: Cho trong file văn bản TONG.INP có cấu trúc như sau:
– Dòng 1: Ghi số nguyên dương p là số lượng chữ số của M (1 ≤ p ≤ 30000).
– Dòng 2: Ghi p chữ số của M theo thứ tự từ trái sang phải, các chữ số được ghi cách nhau ít nhất một dấu cách.
– Dòng 3: Ghi số nguyên dương q là số lượng chữ số của N (1 ≤ q ≤ 30000).
– Dòng 4: Ghi q chữ số của N theo thứ tự từ trái sang phải, các chữ số được ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản TONG.OUT theo cấu trúc như sau:
– Dòng 1: Ghi số nguyên dương k là số lượng chữ số của tổng tìm được.
– Dòng 2: Ghi k chữ số của tổng tìm được theo thứ tự từ trái sang phải, các chữ số được ghi cách nhau ít nhất một dấu cách.
Ví dụ:
TONG.INP TONG.OUT
6
2 2 3 2 3 9
3
2 4 7 6
2 2 3 4 8 6
mong mn lm giúp
program ct;
uses crt;
var i,j,c:longint;
m,n,k:word;
p,q,S,S1,S2,S3,St:string;
v,r:text;
begin clrscr;
readln(v,p);
readln(r,S);
S1:=’ ‘; S2:=’ ‘;
for i:=1 to length(S) do
if S[i]<>#32 then S1:=S1+S[i];
val(S1,m,c);
readln(v,q);
readln(r,St);
for j:=1 to length(St) do
if St[j]<>#32 then S2:=S2+St[j];
val(S2,n);
k:=n+m;
str(k,S3);
writeln(r,length(S3));
for i:=1 to length(S3) do write(r,S3[i],’ ‘);
close(v);
close(r);
end;
begin
assign(v,’TONG.INP’); reset(v);
assign(r,’TONG.OUT’); rewriter);
end;
readln;
end.
Học tốt!
uses crt;
var d:text; i,p,q,t,nho,a1,b1,e:longint; a,b,k:string; c:char;
kq:array[1..30000]of longint;
begin
clrscr;
assign(d,’input.pas’);reset(D);
readln(d,p);
while not(eoln(d)) do begin read(d,c); if c<>’ ‘ then a:=c+a; end;
readln(d);
readln(d,q);
while not(eoln(d)) do begin read(d,c); if c<>’ ‘ then b:=c+b; end;
close(D);
assign(d,’output.pas’);rewrite(D);
if p<q then
begin k:=a; a:=b;
b:=k;
for i:=1 to 30000 do b:=b+’0′;
t:=p; p:=q; q:=t; end;
for i:=1 to p do
begin
a1:=0; b1:=0;
val(a[i],a1,e);
val(b[i],b1,e);
kq[i]:=a1+b1+nho;
if kq[i]>=10 then begin nho:=1; kq[i]:=kq[i] mod 10; end else nho:=0;
end;
if nho=1 then begin inc(p); kq[p]:=1; end;
writeln(d,p);
for i:=p downto 1 do write(d,kq[i],’ ‘);
close(d);
end.
//////////////////////////////////
Giải thích:
Áp dụng qui tắc cộng hồi lớp 3 là:
Vd 1+13 thì sẽ là
13
+
1
Số 1 lui về sau vì đó nên chỗ đọc mình đã đảo ngược số đó
Rồi đạt a là số dài nhất
Rồi đạt b là số ngắn nhất
thành
31
+
1
Tới chỗ tính:
Cộng thì phai có nhớ nên mình tạo biến nhớ
mình cộng hai số thẳng cột.
Nếu tổng lớn hơn 10 thì lấy số sau rồi nhớ = 1 ko thì bằng 0
Khi đọ th
Một số text để bạn tham khảo nè: