Ví dụ; Nhập số thứ nhất: 123 Nhập số thứ hai: 123456789 Phép cộng: 123 +123456789 =123456912 Phép trừ: 123 - 123456789 =- 123456666 Ý tưởng: - Nhập 2 xâu số - Để thực hiện cộng (hoặc trừ) 2 xâu số ta lần lượt cắt từng ký tự (từ phải sang trái) của 2 xâu, sau đó cộng (hoặc trừ) theo mã của các cặp ký tự tương ứng (cần chú ý nhớ và mượn). Chương trình: Var s1, s2, kq, gach, tg: string; Max, i: byte; Procedure Nhap; Begin Write(‘Nhap so thu nhat’); Readln(s1); Write(‘Nhap so thu hai’); Readln(s2); End; Procedure Inan(Dau: char); Begin Writeln(S1:40); Writeln(Dau+’’+s2:40); Writeln(gach:40); Writeln(‘=’+kq:40); End; Function Cong(s1,s2: string):string; Var i, nho, nho2, k, co, hieu: integer; s:string; Begin If length(s1) < length(s2) then k:= length(s1) Else begin k:=length(s2); s:=s1; s1:=s2; s2:=s; end; Hieu:=length(s2) – length(s1); Nho:=0; s:= ‘ ’; For i:=k downto 1 do Begin Co:=ord(s1[i]+ord(s2[i+Hieu]) – 96 +nho; S:=chr(co mod 10 + 48) + s; Nho:=co div 10; End; S:=copy(s2, 1, Hieu) + s; i:=Hieu; If nho <> 0 then While (i>0) and (nho <> 0) do Begin Nho2:=ord(s[i])+nho – 48; S[i]:=char(nho2 mod 10 + 48; Nho:=nho2 div 10; Dec(i) End; If nho <> 0 then s:= ‘1’ + s; Cong: = s; End; Function Tru(s1,s2: string):string; Var i, nho,k,co,co2, Hieu: integer; s: string; Begin If length(s1)< length (s2) then k:=length(s1) Else Begin K:=length(s2); If (length(s1) > length(s2)) or (s1 > s2) then Begin s:=s1; s1:=s2; s2:=s; end; End; Hieu:=length(s2) – length(s1); Nho:=0; s:= ‘ ’; For i:=k downto 1 do Begin Co2: = ord(s1[i]) + nho; If co2 > ord(s2[i+Hieu]) then nho:=1 else nho:=0; Co:=ord(s2[i+Hieu])+10*nho-co2; S:=chr(co mod 10 + 48) + s; End; S: = copy(s2,1, Hieu) + s; I:=Hieu; If nho <>0 then While (i> 0) and (nho <>0) do Begin If ord(s[i])>=49 then nho:=0 else nho:=1; S[i]:=char(ord(s[i]) – 1); Dec(i); End; While (s[i]= ‘0’) and (s <> ‘ ’) do delete(s, 1,1); Tru:=s; End; Begin Nhap; Max:=length(s1); If length(s2) > max then max:=length(s2); Gach:=’’; For i:=1 to max do gach:=gach+ ‘-’; Writeln(‘Phep cong:’:35); Kq:=cong(s1,s2); Inan(‘+’); Writeln; Writeln(‘Phep tru: ’ :35); If (s1 < s2) or (length(s1) < length(s2)) then Begin tg:=s1; s1:=s2; s2:=tg; Kq:= ‘-’ + tru(s1,s2); s2:=s1;s1:=tg; End Else kq:=tru(s1,s2); Inan(‘-’); Readln; End.
School@net (Theo Minh Ngọc- THNT)
|