IT 프로그래밍/객체지향프로그래밍

[c++] 하나의 정수 n을 받은 후 합을 구하는 프로그램

기술1 2024. 4. 17. 20:07
반응형

출처/ 국립부경대학교 권오흠 교수님

내 풀이

#include <iostream>
using namespace std;

int main()
{
	int n;
	cin >> n;
	double sum = 0;
	double num = 1;
	for (int i = 1; i <= n; i++)
	{
		sum += 1 / num;
		num *= i+1;
	}
	cout << sum << endl;
}

먼저 sum과 num을 두었습니다. num은 2! 3!의 분모 자리에 계속 곱해지는 수를 저장할 변수이며 먼저 sum을 진행한 후 num을 반복해서 곱해주는 것으로 마무리 지었습니다. 

 

결과는 정답과 똑같이 나오는 것을 확인했습니다. 

교수님 풀이

#include <iostream>
using namespace std;

int main() {
	int n, denom = 1;
	cin >> n;
	double sum = 0;
	for (int i = 1; i <= n; i++) {
		denom *= i;
		sum += 1.0 / denom;
	}
	cout << sum << endl;
	return 0;
}

다음으로 교수님의 풀이였습니다. 결과값은 똑같지만 교수님의 풀이가 직관적으로 더 이해하기 쉽다는 것을 알 수 있었습니다. 저는 교수님이 만드신 변수의  denom 자리를 sum을 계산하고 곱하기 때문에 +1을 해준 후 곱해주었는데 교수님처럼 denom을 먼저 정의해주면 번거롭지 않게 할 수 있습니다. 

 

변수 sum은 합계를 저장하고 초기값은 0으로 두었습니다.

 

변수 denom은 분모를 나타내며 초기값은 1입니다.

 

for은 1부터 n까지 반복하며 각 항의 합계를 더하며 denom 분모는 반복할 때마다 i의 팩토리얼로 업데이트를 해줍니다. 

반응형