poj 1604

题意:计算n!最后一位不为0的数


解题思路:1*2*3*......*n,每次乘完一个数后,把末尾0去掉,然后模上一个数,这样算出来的数肯定是最后一位不为0的数。。

注意这里模的数不能太小,同时也不能太大,太小可能会影响乘积的效果,譬如可能出现0的情况被之前的模运算给抹掉了,太大就直接溢出了。。。

参考了别人的,模取100000


#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int n,m;
int main()
{
	while(scanf("%d",&n)!=EOF){
		m = 1;
		for(int i = 1; i <= n; i++){
			m = m * i;
			while(m % 10 == 0){
				m = m / 10;
			}
			m %= 100000;
		}
		m %= 10;
		printf("%5d -> %d\n",n,m);
	}
	return 0;
}

你可能感兴趣的:(数学)