HDOJ 1066 Last non-zero Digit in N!

제목 링크 주소:http://acm.hdu.edu.cn/showproblem.php?pid=1066
이 문 제 는 N 을 구 하 는 거 야!의 맨 오른쪽 은 0 자리 가 아 닙 니 다. 예 를 들 어 5! =120  그래서 결과 출력: 2
그냥 템 플 릿 으로 해결 할 수 있어!
원본 코드:
//HDOJ1066  AC

#include <iostream>
using namespace std;

#define MAXN 10000
char c[MAXN];

//  
//        ,   O(nlogn)
//    ,n          5!=120     2
int lastdigit(char* buf){

	const int mod[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2};
	int len=strlen(buf),a[MAXN],i,c,ret=1;

	if (len==1)
		return mod[buf[0]-'0'];
	for (i=0;i<len;i++)
		a[i]=buf[len-1-i]-'0';
	for (;len;len-=!a[len-1]){
		ret=ret*mod[a[1]%2*10+a[0]]%5;
		for (c=0,i=len-1;i>=0;i--)
			c=c*10+a[i],a[i]=c/5,c%=5;
	}
	return ret+ret%2*5;


}

int main(){

	while(cin>>c){
		int result=lastdigit(c);

		cout<<result<<endl;


	}


	return 0;

}

좋은 웹페이지 즐겨찾기