tính theo công thức tổng quát thôi mà... n lớn nhỏ đâu quan trọng.. chủ yếu là làm như thế nào thôi
tính theo công thức tổng quát thôi mà... n lớn nhỏ đâu quan trọng.. chủ yếu là làm như thế nào thôi
Mình dùng Free Pascal. : )) Dùng FPC thì phải khai báo Uses Math. Chả biết các bạn dùng j`, nhưng mình đoán là bh vẫn dùng Turbo 7.0. Các bạn có lẽ chuyển sang dùng Free Pascal vì Turbo 7.0 quả thực rất yếu và cũ quá rồi, các bạn dùng nó thì chẳng thế khai thác hết sức mạnh của máy tính được đâu.
[=========> Bổ sung bài viết <=========]
N to quá thì chả có cái máy nào tính được. Máy tính chỉ chịu đc ~20! thôi, N > 25 chắc chắn die. (Free Pascal báo lỗi 201) Với dữ liệu N như thế thì phải dùng cách nhân số lớn. Nhưng mình đoán đây là bài tập trong SGK 11 nên ko cần. :|
[=========> Bổ sung bài viết <=========]
Người ta cộng bằng mảng chứ ai còn cộng bằng chuỗi nữa bạn. Cộng bằng chuỗi chậm lắm. Xử lý trên chuỗi đã chậm rồi, lại còn thêm mấy hàm Val, Str đổi xâu -> số, số -> xâu thì còn chậm hơn nữa.
Được sửa bởi songohan2009 lúc 22:52 ngày 01-12-2009 Reason: Bổ sung bài viết
Bài này ko có trong SGK đâu vì bài này gần tương tự trong đề thi HSG dưới mình đó... trông đơn giản nhưng thật là phức tạp
Bài 2 bạn giải đc chưa kết quả bài 1 nè bạn:
var S,i,j,t,n:integer;
begin
writeln('nhap n= ');readln(n);
S:=0;
for i:=1 to n do
begin
t:=1;
for j:=1 to i-1 do
t:=t*i;
S:=S+t;
end;
writeln('ket qua: ',S);
readln;
end.
Với câu nói "ko quan tâm độ lớn của N" thì mình thấy bài này... quá dễ! Khi đã có công thức tính độ lớn x^y trong O(1) rồi thì bài toán coi như xong, vấn đề là nếu N > 24 thì chắc chắn máy tính bị tràn số, chả có máy nào lưu được quá 20 chữ số. Với cả khi N nhỏ thì cách tính N!, N^(N-1) là những cái quá căn bản của 1 học sinh đi thi HSG, code cả 2 cái đó ko quá 5 phút.
Bài 1:
Bài 2:Code:var s, i, j, n: longint; function pow(x, y: longint): longint; var i: longint; begin pow := 1; for i := 1 to y do pow := pow * x; end; begin write('Nhap N: '); readln(n); for i := 1 to n do s := s + pow(i, i - 1); writeln('S = ', S); end.
Code:var s, i, j, n: longint; giaithua: array[0..24] of longint; //Nếu bạn code bằng TP thì mình chỉ để longint thôi begin write('Nhap N: '); readln(N); giaithua[0] := 1; for i := 1 to N do giaithua[i] := giaithua[i-1]*i; for i := 1 to n do s := s + giaithua[i]; write('S = ', S); end.
Được sửa bởi songohan2009 lúc 20:01 ngày 02-12-2009
Àh mình mới làm trên máy, Cái công thức S:=S+exp((i-1)*ln(i)) đúng đó
Nhưng khi khai báo biến bạn để S:real;
nhokdragon94 thank nhiều nhé... nhưng tại sao phải khai báo S bằng số thực vậy
mình cũng chả bíc nữa.. Hình như phải là real vì nhỡ 2.13^1.23...là real
Nên khai báo S:real-->chéc zậy (có lũy thừa của 1 số thập phân đấy bạn )
hàm exp là hàm áp dụng cho đối số nguyên hoặc thực nhưng kết quả luôn luôn là kiểu thực
Thank chị hằng nhaz ^^!
Bookmarks