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

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

기술1 2024. 4. 17. 19:50
반응형

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

내가 한 풀이

 

#include <iostream>
using namespace std;

int main()
{
	int n;

	cin >> n;;

	double result = 1;
	for (int i = 1; i <= n; i++)
	{
		if (i % 2 == 1)
		{
			result -= 1 / pow(2, i);
		}
		else
			result += 1 / pow(2, i);
	}

	cout << fixed;
	cout.precision(4);
	cout << result << endl;
}

if문과 else를 통해 풀었습니다. pow()를 통해 해주었으며 함수를 조절할 때는 precision(4)를 통해서 네번째 자리 수까지 나오도록 지정을 해주었습니다. 

 

다른 풀이

#include <iostream>
using namespace std;

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

역시 갓오흠 교수님 답게 정말 깔끔하게 풀었습니다. 제꺼와 비교를 했을 때 제 코드가 많이 부끄러워지네요.

 

일단 int n, denom = 1, sign =1 로 초기화를 해주었습니다. 

 

그리고 sum = 0 으로 초기화를 해주었습니다. 

 

그 다음 for문을 통해 0일때는 1이 나오고 sign을 통해서 -1 1 이 번갈아가면서 나오게 부호를 바꾸어 주었으며 denom을 통해서 계속해서 제곱을 구해주었습니다. 이렇게 하면 제가 원하는 식이 저절로 나오게 되는 것입니다. 

 

문제를 자세히 살펴보니 3째 자리 이후로는 예시와 달라도 괜찮다고 나와있네요. 

 

 

반응형