728x90
1. 문제
https://codeup.kr/problem.php?id=2115
[출처 : 코드업(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;
}
'프로그래밍 > CodeUp' 카테고리의 다른 글
CodeUp[Q_2605] : 캔디팡 (0) | 2020.04.03 |
---|---|
CodeUp[Q_2604] : 실수를 기약 분수로 변환 (0) | 2020.04.02 |
CodeUp[Q_2112] : 매우 큰 수의 비교 (0) | 2020.03.29 |
CodeUp[Q_2042] : 소화기가 필요해 (0) | 2020.03.28 |
CodeUp[Q_2041] : 회원들의 나이 차이 (0) | 2020.03.27 |