<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 8 (11, 12, 13)

11. [프로그램 8-32]를 반복문 형태로 수정하시오.

<프로그램 [8-32]>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void palindrome(int n);

int main()
{
	int n;

	printf("양의 정수 n을 입력하면 거꾸로 출력하는 프로그램입니다. n은? ");
	scanf("%d", &n);

	palindrome(n);

	return 0;
}

// 양의 정수 n을 거꾸로 출력하는 재귀적 함수
void palindrome(int n)
{
	// n의 끝자리 값 출력하기
	printf("%d", n % 10);

	// n이 10단위 이상의 값이라면 재귀 호출로 나머지 자리를 출력하기
	if (n >= 10)
		palindrome(n / 10);
}

 

<수정한 코드>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void palindrome(int n);

int main()
{
	int n;

	printf("양의 정수 n을 입력하면 거꾸로 출력하는 프로그램입니다. n은? ");
	scanf("%d", &n);

	palindrome(n);

	return 0;
}

// 양의 정수 n을 거꾸로 출력하는 함수
void palindrome(int n)
{
	while (n >= 10) {
		printf("%d", n % 10);
		n /= 10;
	}
	printf("%d", n % 10);
}

 


12. 함수의 원형이 int factorial(int n);인 N!(팩토리얼)을 구하는 재귀 함수를 정의하여 사용자가 입력한 임의의 양의 정수 n에 대해 n!을 구하는 프로그램을 작성하시오. n! = 1 * 2 * 3 * ... * n 이다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int factorial(int n);

int main()
{
	int n;

	printf("숫자 입력: ");
	scanf("%d", &n);

	printf("%d", factorial(n));

	return 0;
}

int factorial(int n)
{
	if (n > 1)
		return n * factorial(n - 1);
	else
		return 1;
}

13. [프로그램 8-32]를 참고해 사용자가 입력한 양의 정수를 2진수로 출력하는 binary 함수를 정의하시오.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void binary(int n);

int main()
{
	int n;

	printf("n은? ");
	scanf("%d", &n);

	binary(n);

	return 0;
}

void binary(int n)
{
	if (n >= 2)
		binary(n / 2);
	printf("%d", n % 2);
}