求n!末尾0的个数以及 最末尾 1的位置

来源:互联网 发布:ubuntu 14 32位下载 编辑:程序博客网 时间:2024/06/05 22:30

1、首先先说0个数,就是求n里面因子5的个数

2、N!的质因子2的个数 == [N/2]+[N/2^2]+[N/2^3]+....
然后+1就是得到位置了。(PS:位置从1开始算)
N!的质因子2的个数的另一个方法
N!含有质因数2的个数,等于N减去N的二进制表示中1的个数


#include<cstdio>#include<cstring>#include<iostream>using namespace std;int Get_num(int n){    int ans = 0;    while(n){       n = n / 2;       ans += n;    }    return ans;}int main(){    int n;    while(scanf("%d",&n) != EOF){        int ans = 0;        int t = n;        while(t){            t = t / 5;            ans += t;        }        int x = Get_num(n);        printf("%d %d\n",ans,x);    }    return 0 ;}


0 0
原创粉丝点击