TIN TỨC CẬP NHẬT
Một hướng mở rộng phạm vi số nguyên
2 posters
Trang 1 trong tổng số 1 trang
Một hướng mở rộng phạm vi số nguyên
Nguồn: [You must be registered and logged in to see this link.]
Ta biết rằng ở trên máy vi tính đối với một số ngôn ngữ lập trình, số nguyên dương n có giới hạn n < 32768 vì vậy, việc tính toán trên số nguyên ngoài giới hạn trên không thể thực hiện được nhờ các phép toán của máy tính. Chúng ta có thể khắc phục bằng cách biểu diễn số nguyên dưới dạng các ký tự thông qua nã ASCII của nó.
Ví dụ;
Nhập số thứ nhất: 123
Nhập số thứ hai: 123456789
Phép cộ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:
PHP Code:
Ta biết rằng ở trên máy vi tính đối với một số ngôn ngữ lập trình, số nguyên dương n có giới hạn n < 32768 vì vậy, việc tính toán trên số nguyên ngoài giới hạn trên không thể thực hiện được nhờ các phép toán của máy tính. Chúng ta có thể khắc phục bằng cách biểu diễn số nguyên dưới dạng các ký tự thông qua nã ASCII của nó.
Ví dụ;
Nhập số thứ nhất: 123
Nhập số thứ hai: 123456789
Phép cộng:
- Code:
123
+123456789
---------------------
=123456912
- Code:
123
- 123456789
---------------------
=- 123456666
- 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:
PHP Code:
- Code:
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.
Re: Một hướng mở rộng phạm vi số nguyên
Úi trời ạ
Ngô Bảo Châu
Ngô Bảo Châu
Trang_Pham- THƯỢNG TƯỚNG V
- Tổng số bài gửi : 616
Join date : 18/09/2010
Age : 32
Đến từ : Vietnam
Similar topics
» Gần 2/3 người dùng web mắc bẫy tội phạm ảo
» Phim tài liệu: 54. Tin Tặc: Thiên Thần và Tội Phạm
» Siêu phẩm điện ảnh ! Không xem phí đời :))
» Những nguyên nhân gây lỗi khi ghost
» Tuyệt Phẩm Hoàng Thi Thơ Và Thanh Sơn - Cẩm Ly & Quốc Đại
» Phim tài liệu: 54. Tin Tặc: Thiên Thần và Tội Phạm
» Siêu phẩm điện ảnh ! Không xem phí đời :))
» Những nguyên nhân gây lỗi khi ghost
» Tuyệt Phẩm Hoàng Thi Thơ Và Thanh Sơn - Cẩm Ly & Quốc Đại
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết