c++질문입니다
조회수 1187회
함수를 이용해 n까지의합, n까지의 짝수의 합, 홀수의 합을 구하고 싶습니다. 함수안에서 구현, 메인함수에서는 출력만 하는 방식입니다. 실행해 보니 초기화 되지 않은 지역변수 i,s,r을 사용하고 있다고 나옵니다. 제가 코딩하고 있는 방향이 제가 원하는 방향과 일치하는지 확인부탁드립니다. 어떤 방식으로 고쳐나가면 될지 고수님들의 조언부탁드립니다..
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
깊은 고뇌가 느껴지는 코드네요.
아래 코드 참고하세요.
- 코드
#include<iostream> using namespace std; void sum(int n, int* nsum, int* esum, int* osum); int main() { int nsum = 0, esum = 0, osum = 0; int n = 0; cin >> n; sum(n, &nsum, &esum, &osum); cout << "1부터 n까지의 합: " << nsum << endl; cout << "1부터 n까지의 짝수의 합: " << esum << endl; cout << "1부터 n까지의 홀수의 합: " << osum << endl; return 0; } void sum(int n, int* nsum, int* esum, int* osum) { *nsum = 0; *esum = 0; *osum = 0; for (int i = 1; i <= n; i++) { (*nsum) += i; if (i % 2 == 1) (*osum) += i; else (*esum) += i; } }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
-
- 코드는 캡쳐말고, 직접 텍스트를 복사해서, 마크다운 소스코드 블럭 안에 넣어서 질문해 주세요.
- i, s, r 변수는 main 에서 선언할 필요가 없네요. sum 함수 안의 지역변수로도 충분합니다.
- for 루프 전에 s 초기값 0 주는 것 필요합니다.
- brute force 로 총합, 짝수합, 홀수합을 각각 구하는 것이 코드를 읽는 입장에서도 더 이해하기 편하긴 합니다.
- 수식을 계산해서, n 이 짝수일 때 홀수이를 때를 나누어 계산한 것 같은데, 그럴 거라면, 왜
nsum = n*(n+1)/2
로 계산하지 않나요? - cogi 님이 댓글로 달아놓은 조언들도 중요한 내용들입니다.
댓글 입력