zoukankan      html  css  js  c++  java
  • 简单的C++程序题总结

    1、求一个数的二进制中1的个数。

    思想的关键在于x=x&(x-1)这里,例如二进制为0x0729,即x=0000 0111 0010 1001,那么x-1=0000 0111 0010 1000,经过与运算,都为1的时候才为1,可得x&(x-1)=0000 0111 0010 1000,成功的把x的最后一个1变为0了,通过循环可得所有1的个数。

    #include <stdio.h>
    int func(int x)
    {
        int countx=0;
        while(x){
            countx++;
            x=x&(x-1);
        }
        return countx;
    }
    int main(int argc, char **argv)
    {
        printf("%d
    ",func(9999));
        return 0;
    }

    2、n!的后门连续0的个数。

    对于一个数n的阶乘 n! ,计算其后面有几个连续的零。 我们知道,10 = 2 * 5。每一个 2 与一个 5 相乘,结果就增加一个零。所以求 n! 后面的连续零的个数,其实就是求其中相乘的数含有因子每对因子 2 与 5 的个数。又因为从1到某个数,所含 2 的个数比 5 多,所以问题就可以进一步简化到求含有因子5的个数。

    #include <iostream>
    #include <string>
    using namespace std;
    
    int zeroCount ( int n) {  
        int counter = 0;  
        while(n){
            counter+=n/5;
            n/=5;
        }
        return counter;  
    }  
    
    int main()
    {
        cout<<zeroCount(100)<<endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    (十六)字段表集合
    (十五)类索引
    (十四)访问标志 Access_flags
    (一)单例模式
    (二十三)IDEA 构建一个springboot工程,以及可能遇到的问题
    (十三)class文件结构:常量池(转)
    Hive优化
    标签整理
    一些学习资料
    jstree树形菜单
  • 原文地址:https://www.cnblogs.com/dgy5554/p/3973395.html
Copyright © 2011-2022 走看看