题目求N!中有多少个0
用16进制高精度模拟
想起来一起以前做过的一道题,求末尾有多少个0,不能取0前边的3 4个非零位存下来进行计算,误差太大
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
#define Max 2000
int num[Max], pre[Max];
void init()
{memset(num, 0, sizeof(num));memset(pre, 0, sizeof(pre));pre[0] = 1;for(int i = 2; i <= 110; i++){int c = 0;for(int j = 0; j < Max; j++){int sum = pre[j]*i + c;pre[j] = sum%16;c = sum/16;}int k;for(k = Max-1; k >= 0; k--) if(pre[k])break;for(int j = 0; j <= k; j++) if(!pre[j])num[i]++;}
}
int main(void)
{
// freopen("1.txt", "r", stdin);
// freopen("2.txt", "w", stdout);int n;init();while(cin>>n && n >= 0){cout<<num[n]<<endl;}return 0;
}