01/10/2018, 15:58

Tính tổng 1 + 1/2! + 1/3! + ... + 1/n!

Mình viết code như dưới đây xong rồi mình chạy thử thì ra kết quả khác với khi mình bấm máy tính, ai có thể xem giúp mình sai chỗ nào được không ạ?

#include <iostream>
#include <iomanip>
using namespace std;
float S( int n )
{
	double A = 0;
	for ( int i = 1 ; i <= n ; i++)
	{
		int gt = 1;
		gt *= i;
		A = A + ((double)1/gt);
	}	
	return A;
}

int main()
{
	int n;
	cout<<"Nhap n : ";
	cin>>n;
	if ( n >= 20 )
	{
		cout<<"Nhap lai n : ";
		cin>>n;
	}
	cout<<"S("<<n<<") = "<<setprecision(9)<<S(n);
	return 0;
}
Nguyễn Phạm Anh Quân viết 18:04 ngày 01/10/2018

Sửa lại thành A = A + 1.0 / (double)gt; nha em!

quanghoa viết 18:10 ngày 01/10/2018

em sửa lại chạy được nhưng kết quả lại khác với khi em bấm máy tính. ví dụ em nhập n = 5 kết quả ra bằng 2,2833333 trong khi máy tính ra bằng 1,71666667, em sai chỗ nào ạ?

HK boy viết 17:58 ngày 01/10/2018

for ( int i = 1 ; i <= n ; i++)
{
int gt = 1;

Vứt dòng khởi tạo gt ra ngoài vòng for nhé.

HK boy viết 18:07 ngày 01/10/2018

Bạn tự đọc lại công thức với đoạn

mau*=i;
S = S + pow(-1,i+1)*(1/float(mau));

xem có gì ổn hay không ổn không.

quanghoa viết 18:13 ngày 01/10/2018

mình chạy vòng lặp ra giấy thử thấy giống nhau mà, cái công thức với cái đoạn mình viết cũng như nhau sao kết quả chả giống

HK boy viết 18:00 ngày 01/10/2018

2 bài khác nhau, sao bạn áp cùng 1 công thức được.

1 - 1/2 + 1/3 - 1/4 + … +(-1)^(n-1)*1/n

với 1 + 1/2! + … + 1/n!

quanghoa viết 17:59 ngày 01/10/2018

đâu có, công thức khác mà bạn, bài sau mình viết công thức khác mà

HK boy viết 17:59 ngày 01/10/2018

Công thức khác nhưng code của bạn có khác gì không?

quanghoa viết 18:02 ngày 01/10/2018

à mình xem lại rồi, code mình viết khác nhưng sai chỗ kia
cảm ơn bạn nha !

Bài liên quan
0