3자리로 이루어진 자연수 3개를 입력받아 그 수들의 곱을 구한 후 그 결과값의 각 자리 숫자들중 0을 제외한 모든 수들의 곱을 구하여 출력하는 프로그램을 재귀함수로 작성하시오.
- 입력: 100 123 111
- 출력: 270
도움말: 입력예제의 세 수의 곱은 1365300이다. 그러므로 1 * 3 * 6 * 5 * 3 = 270 1의 자리수 * 1의 자리를 제외한 남은 자리수의 곱 (단 1의 자리수가 0이면 1로 바꾸어서 곱한다.)
코드입니다.
#include <stdio.h>
int cal(int mul, int num)
{
if(!(mul/10))
return num*mul;
if(mul%10)
return cal(mul/10, num*(mul%10));
else
return cal(mul/10, num);
}
int main(void)
{
int inp1, inp2, inp3;
scanf("%d %d %d", &inp1, &inp2, &inp3);
int mul = inp1*inp2*inp3;
printf("%d", cal(mul, 1));
return 0;
}
저는 재귀함수가 호출 호출 호출 호출하고 호출된 값을 거슬러 올라가서 값을 구하는 방식인 거라고 생각합니다. 이렇게 이해 했습니다.
제 생각대로라면 두 번째 if문에서 num/10을 계속해서 호출할 때, 만약 mul값이 135780이라고 하면 13578 1357 135 13 1 이렇게 값이 반영되고 이 반영된 값이 뒤에 있는 인자 값이랑
1* 뒤에 인자 값 13*뒤에 인자 값 135*뒤에 인자 값 13578*뒤에 인자 값 이렇게 되는 거 아닌가요? 정말 이해하기 함듭니다요.