학습 정리/👨‍💻 PS Study

[C] 백준 21567번 - 숫자의 개수 2

무딘붓 2022. 7. 6. 23:00

https://www.acmicpc.net/problem/21567

 

21567번: 숫자의 개수 2

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 1,000,000보다 작은 자연수이다.

www.acmicpc.net

(21.08.07)

 

21567번: 숫자의 개수 2 - C언어 풀이


[소스코드]

 

#include <stdio.h>
// [baekjoon] 21567번 - 숫자의 개수 2

int main() {

	long long A, B, C;
	long long D = 1;
	int cnt[10] = { 0 };
	scanf("%lld", &A);
	scanf("%lld", &B);
	scanf("%lld", &C);
	D = A * B * C;

	while (D > 0) {
		int n = D % 10;
		cnt[n]++;
		D /= 10;
	}

	for (int i = 0; i < 10; i++) {
		printf("%d\n", cnt[i]);
	}

}


세 수의 곱을 저장할 D는 long long으로 잘 선언해 놓고,
A, B, C는 int로 선언해서 해맸던 문제..​

A, B, C가 int로 선언되어있어서 당연히 계산결과인 A * B * C도 int 범위에서만 저장되니까
계산 결과가 int범위를 넘어서 오버플로(Overflow)가 발생했다.​

A, B, C를 int로 두고
D *= A;
D *= B;
D *= C;
로 계산해도 풀리긴 한다.