Q. 1+(1+2)+(1+2+3)+...+(1+2+3+...+10)의 합을 다음과 같은 중간결과로 출력하는 프로그램을 작성하시오.
A.
실행 결과
#include <stdio.h>
void printPartial(int j);
int main(void) {
int i, j;
int s = 0, p;
for (i = 1; i <= 10; i++) {
p = 0;
// 출력 형식 처리(i==1은 special case)
printf("1 ");
if(i==1)
p = 1; // 부분합 초기화
for (j = 2; j <= i; j++) {
//1은 이미 출력됐으니까 (1+'2') 부터 출력되도록 구간 설정하고,
// 이후 함수에서 반복문 구간 설정할 때 k=1; k<=j; k++로 두고 k==1일 때의 조건을 따로 설정한다. 이또한 special case
printPartial(j);
}
for (int k = 1; k <= j; k++) {
p += k;
}
s += p; // 누적합 계산
printf(" = %d\n", s); // 결과 출력
}
// 마지막 줄바꿈 추가
return 0;
}
void printPartial(int j) {
for (int k = 1; k <= j; k++) {
if (k == 1) //first
printf("+(%d+", k);
else if (k == j) //last(마감)
printf("%d)", k);
else if (k != j)
printf("%d+", k);
}
//printf(" [Partial Sum: %d] ", *p); // 디버깅용 출력
}