이야기

2006-01-15 04:52:22 Wrong Answer 0.037 Minimum
// <가짜 코드>
// N을 팩토리얼
// 그것의 0의 갯수를 샌다.
// -> N의 팩토리얼에서 % B 을 0과 비교, N/B 한후 또 % B과 0 비교.
// ->N/8이 1보다 작아질 때 까지. count 센다.

이것을 기본으로 하려고 했다.
뒤에 숫자 세는 것만 없었어도 먹히는건데..-_-;
아참. 0의 갯수가 2^31-1 까지라 함은, N의 입력범위를 모르겠다.
그래서 틀린게 아닐까?

5 12
팩토리얼-> 120, 12진수: A0
그러므로 1, 2 출력 해야함

코드

//HowManyZerosAndDigits
// no 10061
#include <iostream>
using namespace std;
#include <math.h>

unsigned int factorial(const unsigned int &num)
{
	unsigned int n = 1, factorialN = 1;
	while(n <= num)
	{
		factorialN *= n++;
	}
	return factorialN;
}

unsigned int main()
{
	unsigned int N, B;
	unsigned int factorialN = 0;
	unsigned int zeroCount = 0, numCount = 0;

	while(cin >> N >> B)
	{
		factorialN = factorial(N);
		while(factorialN >= 1)
		{
			if(factorialN % B == 0)
				++zeroCount;
			else
				;
			++numCount;
			factorialN /= B;
		}
		
		if(N == 0){
			numCount = 0;
			zeroCount = 1;
		}
		cout << zeroCount << " " << numCount << endl;
		
		zeroCount = 0;
		numCount = 0;		
	}
	return 0;
}

Retrieved from http://wiki.zeropage.org/wiki.php/HowManyZerosAndDigits/허아영
last modified 2021-02-07 05:23:25