找N!最后一个非零的数字

来源:互联网 发布:java都要掌握什么技术 编辑:程序博客网 时间:2024/06/06 00:50
#include <iostream>int digits[10];long long power(long long a, long long b){if(b == 0)return 1;else if(b == 1)return a;long long temp = power(a, b/2);if(b%2)return a*temp*temp;elsereturn temp*temp;}int get5(int n){if (n == 0)return 0;return n/5 + get5(n/5);}int get2(int n){if(n == 0)return 0;return n/2 + get2(n/2);}int g(int x, int n){if (n == 0)return 0;return n/10+(n%10>=x)+g(x, n/5);}int getx(int x, int n){if(n == 0)return 0;return getx(x, n/2) + g(x, n);}int hash[4][4] ={{6, 2, 4, 8},{1,3,9,7},{1,7,9,3},{1,9,1,9}};int main(){int N, M;while(scanf("%d%d", &N, &M) != EOF){memset(digits, 0, sizeof(digits));digits[2] = get2(N)-get2(N-M);digits[5] = get5(N)-get5(N-M);digits[3] = getx(3, N)-getx(3, N-M);digits[7] = getx(7, N)-getx(7, N-M);digits[9] = getx(9, N)-getx(9, N-M);if (digits[5] > digits[2]){printf("5/n");continue;}else{int ret = 1;if (digits[5] != digits[2]){ret *= hash[0][(digits[2]-digits[5])%4];ret %= 10;}ret *= hash[1][digits[3]%4];ret %= 10;ret *= hash[2][digits[7]%4];ret %= 10;ret *= hash[3][digits[9]%4];ret %= 10;printf("%d/n", ret);}}return 0;}