HDU 2940 Hex Factorial(二进制乘法)
2012-08-22 17:26
274 查看
题意:求n的阶乘转为16进制后有多少个0
输入以负数结束,,n==0 时答案为0
c++ 代码(二进制乘法)
J***A 大数
输入以负数结束,,n==0 时答案为0
c++ 代码(二进制乘法)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> using namespace std; const int M = 1009; struct bt{ int a[M]; void init(){memset(a,0,sizeof(a));} void out() { for(int i=0;i<M;i++) cout<<a[i];cout<<endl; } }; bt add(bt a,bt b) { bt ans ;ans.init(); int tmp = 0; for(int i=0;i<M;i++) { ans.a[i] = (a.a[i]+b.a[i]+tmp)%2; tmp = (a.a[i]+b.a[i]+tmp)/2; } return ans; } bt Multiply(bt a,bt b) { bt tmp,ans;ans.init(); for(int i=0;i<M;i++) if(a.a[i]==1) { tmp.init(); for(int j=i;j<M;j++) tmp.a[j] = b.a[j-i]; ans = add(ans,tmp); } return ans; } bt tobt(int k) { bt ans; ans.init(); for(int i=0;k;i++) ans.a[i]=k%2,k/=2; return ans; } int main() { freopen("in.txt","r",stdin); int n; while(scanf("%d",&n)&&n>=0) { if(n==0) { printf("0\n");continue; } bt t ; t = tobt(1); for(int i=2;i<=n;i++) t = Multiply(t,tobt(i));//,t.out(); int f,ans=0; for(int i=M-1;i>=0;i--) if(t.a[i]) { f= i; break; } for(int i=0;i<=f;i+=4) if(!t.a[i]&&!t.a[i+1]&&!t.a[i+2]&&!t.a[i+3]) ans++; printf("%d\n",ans); } return 0; }
J***A 大数
import java.math.*; import java.util.*; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner cin = new Scanner(System.in); while(true){ BigInteger a = BigInteger.ONE; BigInteger si = BigInteger.valueOf(16); //BigInteger two = BigInteger.ONE.add(BigInteger.ONE); int n = cin.nextInt(); if(n<0) break; if(n==0) { System.out.println(0); continue; } for(int i=2;i<=n;i++){ a = a.multiply(BigInteger.valueOf(i)); } //System.out.println(a); int ans = 0; while(a.max(BigInteger.ZERO).equals(BigInteger.ZERO)==false){ //int t = 0; //for(int i=0;i<4;i++){ if(a.mod(si).equals(BigInteger.ZERO)) ans++; //System.out.print(a.mod(si)+" "); a = a.divide(si); // } // if(t==0) ans++; }//System.out.println(); System.out.println(ans); } cin.close(); } }
相关文章推荐
- HDU 2940 Hex Factorial 高精度乘法
- 高精度 hdu 2940 Hex Factorial
- HDU 2940 Hex Factorial(高精度,打表)
- HDU 5666(二进制模拟乘法)
- c++两个常用函数:1.二进制字符串2 hex(十六进制)。2. 栈变量字符串2堆变量
- HDU 5187 zhx's contest(快速幂乘法)
- hdu 1757 A Simple Math Problem (乘法矩阵)
- hdu 1041 计算机二进制n步操作(大数加法)
- HDU1217-Arbitrage(乘法最短路)
- hdu 3893 Drawing Pictures 矩阵乘法
- Python 实现通过 RNN实现二进制的乘法
- hdu 5187(快速幂+快速乘法)
- hdu 2844 Coins 多重背包模板题 ,二进制优化。据说是楼教主的男人八题之一
- HDU 2191 多重背包的二进制实现
- ACM 数论 hdu 1124 Factorial
- HDU 5573 Binary Tree 构造(二进制)
- Hdu 2157 How many ways??(DP||矩阵乘法)
- hdu 2256 Problem of Precision(矩阵乘法)
- hdu--4920--原来一直写了速度慢的矩阵乘法
- HDU 4920 Matrix multiplication(矩阵乘法小技巧)——2014 Multi-University Training Contest 5