본문 바로가기
프로그래밍/CodeUp

CodeUp[Q_2115] : 팩토리얼 계산 (Large)

by 조원일 2020. 3. 30.
728x90

1. 문제

https://codeup.kr/problem.php?id=2115

 

팩토리얼 계산 (Large)

30414093201713378043612608166064768844377641568960512000000000000

codeup.kr

[출처 : 코드업(https://codeup.kr/)]

이번 문제는 팩토리얼을 계산하는 문제입니다.

다만 숫자가 너무 커서 일반적인 자료형으로는 계산하기 힘들어서 int형 배열을 사용하여 계산하면 됩니다.

 

 

 

2. 풀이방법

STEP 1. 배열을 이용하여 곱셈계산을 할수있는 함수 작성
ex) 123 * 12 = ?

36(3*12) | 24(2*12) | 12(1*12)
6  |  27(24+3)  |  12
6  |  7  |  14(12+2)
6  |  7  |  4  |  1

 

 

3. 해답

#include <stdio.h>

int arr[500] = { 0, };

void muti(int n) {
	// 각 자리수에 n을 곱하기
	for (int i = 0; i < 500; i++) {
		arr[i] *= n;
	}

	// 각 자기수가 10이 넘어가면 
	for (int i = 0; i < 499; i++) {
		if (arr[i] < 10) continue;

		arr[i + 1] += (arr[i] / 10);
		arr[i] %= 10;
	}
}

int main() {
	int n, p = 499;

	scanf("%d", &n);

	arr[0] = 1;

	
	for (int i = 2; i <= n; i++) {
		muti(i);
	}
	
	while ((p >= 0) && (arr[p] == 0)) {
		p--;
	}

	for (int i = p; i >= 0; i--) {
		printf("%d", arr[i]);
	}

	return 0;
}