当前位置: 代码迷 >> 综合 >> HDU 2940 Hex Factorial
  详细解决方案

HDU 2940 Hex Factorial

热度:90   发布时间:2023-12-12 15:18:08.0

题目求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;
}