简单的C++程序题总结

来源:互联网 发布:艾灸淘宝推广文章 编辑:程序博客网 时间:2024/06/03 19:38

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\n",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;}


0 0
原创粉丝点击