阶乘最后非零位 模板

转载 2012年03月27日 12:50:00
#include <iostream>

using namespace std;

#define MAXN 10000
char c[MAXN];
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;

}

相关文章推荐

Factorial Power(阶乘最后非零位)

http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=130 1.暴力代码:

排列数最后非零位:poj 1150 The Last Non-zero Digit

数论 组合数学(好题)题目大意: 求排列数A(n,m)最后的非零数位解题思路: 参考英文文献,多读几遍,豁然开朗,分析见功底。 http://www.cppblog.com/abilityta...

阶乘算法全集,阶乘末尾非零位,阶末尾零的个数

/阶乘各算法的 C++ 类实现 #include iostream> #include cstring> #include iomanip>  #include cmath>  usin...

阶乘算法全集,阶乘末尾非零位,阶末尾零的个数(转)

阶乘算法全集,阶乘末尾非零位,阶末尾零的个数(转) 分类: ACM&&Algorithm2010-10-16 22:19 153人阅读 评论(0) 收藏 举报 算法...

计算阶乘最后20个非零数据

  • 2007年10月26日 09:23
  • 69KB
  • 下载

求阶乘最后一位非0位

设f(n)表示n!的最后一位非0位 d(n)表示n!中不计算5的倍数时的结果,比如d(6)=1*2*3*4*1*6 m(n)表示d(n)最后一位,并且这一位一定不为0。 m(n)很特殊,因为他是循环的...

POJ 1150 The Last Non-zero Digit 阶乘最后非0位

转自:http://www.cppblog.com/abilitytao/archive/2009/10/31/99907.html 这个题怎么来做呢?先别急,我们先来讨论一下下面几个子问题: ...
  • Tsaid
  • Tsaid
  • 2012年02月16日 20:11
  • 1583

IOS算法面试题(2)——任意阶乘的最后0的个数、超大数相加集总

// // main.c // 求任意阶乘最后0的个数(正确思路) // // Created by qianfeng on 15/12/15. // Copyright (c) 2015年 ...

求N!阶乘中结尾0的个数,或结果的二进制表示中最后一个1所在的位置

问题1:阶乘结尾0的个数 要想阶乘的结尾是0,那么这个0已经通过5的倍数乘以另一个数获得,例如:5,10,15,20,25...,同时可以注意到这样一个规律,5,10,15,20,30,35,40与...

1002N!(C语言N的阶乘 大数模板)

Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in o...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:阶乘最后非零位 模板
举报原因:
原因补充:

(最多只允许输入30个字)