HDU 2940 Hex Factorial 高精度乘法

    xiaoxiao2021-12-14  17

    题意:给你一个10进制数n 计算n的阶乘转化为16进制后中有多少个0 思路:先吧n转化为16进制 然后按照16进制的进位进行高精度乘法 ACcode:

    #include<bits/stdc++.h> using namespace std; #define mmax 10010 #define new 16 struct Bignum { int Sz; int num[mmax]; Bignum(int sz,int *a) { Sz=sz; for(int i=0;i<Sz;i++) num[i]=a[i]; } Bignum(int x) { Sz=0; while(x) { num[Sz++]=x%new; x/=new; } } Bignum operator * (const Bignum &a) { int tmp[mmax]; memset(tmp,0,sizeof tmp); for(int i=0;i<Sz;i++) for(int j=0;j<a.Sz;j++) { tmp[i+j]+=num[i]*a.num[j]; } for(int i=0;i<Sz+a.Sz;i++) { tmp[i+1]+=tmp[i]/new; tmp[i]%=new; } for(int i=Sz+a.Sz-1;i>=0;i--) { if(tmp[i]) return Bignum(i+1,tmp); } return Bignum(1,tmp); } }; int num[110]; int main() { Bignum ans(1); for(int i=1;i<=100;i++) { ans=ans*Bignum(i); int cnt=0; for(int i=0;i<ans.Sz;i++) { if(ans.num[i]==0) cnt++; } num[i]=cnt; } int n; while(scanf("%d",&n)!=EOF) { if( n < 0) break; printf("%d\n",num[n]); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-965209.html

    最新回复(0)