5559
3449
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
- Lỗi: Tràn số (Để ý thì đây là bài tính n!)
- Khắc phục: Sử dụng "bignum" là được
- Code:
uses crt;
type int = longint;
type xau = ansistring;
function to_str(v: int): xau; var temp: xau; begin str(v, temp); exit(temp); end;
operator -(c: char; v: int) r: int; begin r:=ord(c) - v; end;
operator +(c: char; v: int) r: char; begin r:=chr(ord(c) + v); end;
operator *(a, b: xau) res: xau;
var r: array[0..100000] of int;
i, j, n, m: int;
begin
fillchar(r, sizeof(r), 0);
res:='';
n:=length(a); m:=length(b);
for i:=1 to n do
for j:=1 to m do
inc(r[i + j], (a[i] - 48) * (b[j] - 48));
for i:=n + m downto 1 do begin
inc(r[i - 1], r[i] div 10);
r[i]:=r[i] mod 10;
end;
for i:=0 to n + m do res:=res + ('0' + r[i]);
while (res[1] = '0') and (length(res) > 0) do delete(res, 1, 1);
end;
operator *(a: xau; b: int) res: xau; begin res:=a * to_str(b); end;
operator :=(a: int) r: xau; begin r:=to_str(a); end;
var i, n: word;
p: xau;
begin
clrscr;
readln(n);
p:=1;
for i:=1 to n do p:=p * i;
writeln(p);
readln;
end.
Hãy giúp mọi người biết câu trả lời này thế nào?
1598
1748
`@`Lỗi: Khi nhập n có giá trị lớn, giá trị của biến p sẽ vượt quá phạm vi giá trị của kiểu dữ liệu longint;
`=>` Sửa lại: Đổi kiểu longint `->` extended
________________________________
`@`Viết lại code:
uses crt;
var i,n : longint ;
p : extended;
begin
clrscr;
readln(n);
p := 1 ;
for i := 1 to n do
p := p * i ;
write(p);
end .
Hãy giúp mọi người biết câu trả lời này thế nào?
5559
3449
À, na có thể dùng p :0:0 để số làm tròn như số nguyên nhé !
1598
1748
ôk
Bảng tin
5559
4821
3449
sai ời
5559
4821
3449
Sai ý em
1210
30631
1160
nhưng đúng đề mà :))
1210
30631
1160
hay cho comment thôi :))
5559
4821
3449
Dạ anh
5559
4821
3449
Nhưng mà cái đoạn sửa hơi bị lố ý ạ
1210
30631
1160
cơ mà mấy cái thêm vào đều được dùng mà :))
5559
4821
3449
Dạ vâng anh ạ