编程之美--做题笔记(1)
来源:互联网 发布:linux 最新版qq 编辑:程序博客网 时间:2024/06/04 19:10
1.求2进制数中1的个数
#include "stdafx.h"
int count(int v){
intnum =0;
while(v){
//右移一位,看最低位是否为1
num+= v & 0x01;
v>>= 1;
}
returnnum;
}
int count2(int v){
intnum = 0;
while(v){
//v与v-1的按位与,会从低位到高位消掉1.如1010 & (1010 - 1) = 1010 & 1001 = 1000
v= v & (v-1 );
num++;
}
returnnum;
}
int main(int argc, char* argv[])
{
// printf("HelloWorld!\n");
printf("%d\n",count(236455));
printf("%d\n",count2(236455));
return0;
}
结果:
12
12
2.求N!中末位0的个数
//N! = ( 2 的x 次方 )+( 3 的y次方) + ( 5 的z次方),可见N!中含有0的个数等于(x,z)的最小值,明显
//x是大于z的,只需求z的值
//求小于N中每个数含有5的因子数
int factor0Num(int N){
intnum = 0;
for(inti=1; i <=N; i++){
intj = i;
while(j % 5 == 0 ){
num+= 1;
j= j/5;
}
}
returnnum;
}
// Z = [ N /5 ] + [N/25] + [N/125] + ......
//即在[N/5]小于Z的数中每个数 先贡献一个5 ,比如 35 != 1 *2 * 3...* 35 ,这里共有7个数含有5
//[N/25] 小于Z的数中每个数中能贡献 25 的个数
int factor0Num2(int N){
intnum = 0;
while(N){
num+= N /5;
N/= 5;
}
returnnum;
}
int main(int argc, char* argv[])
{
//printf("%d\n",count2(236455));
printf("%d\n",factor0Num(100));
printf("%d\n",factor0Num2(100));
return0;
}
结果
24
24
- 编程之美--做题笔记(1)
- 《编程之美》笔记---1
- 编程之美 笔记
- 编程之美笔记
- 编程之美笔记
- 编程之美学习笔记(一): 1的数目
- 编程之美 学习笔记1_1
- <编程之美>学习笔记1
- 编程之美 笔记(转贴)
- 《编程之美》简略笔记
- 《编程之美》学习笔记
- 编程之美解题笔记
- 《编程之美》阅读笔记
- 编程之美 学习笔记
- 《编程之美》学习笔记
- 编程之美1
- 编程之美学习笔记之2.1
- 读《编程之美》中 1的数目 的笔记
- DDR DQS 操作
- ASP.NET 格式化字符串
- adb的使用
- Oracle分页查询语句(一)
- 英文网站不可缺少的六个页面包括
- 编程之美--做题笔记(1)
- Oracle分页查询语句(二)
- 分析www.o.cn以及www.edushi.com技术实现过程
- PDU 的编码
- 访问 IIS 元数据库失败 解决办法
- 对内网不能用外网地址访问内部服务器的通俗详细解释
- SQLite的shell简单使用
- Oracle分页查询语句(三)
- 修改Windows环境变量后不重新启动使之立即生效的方法