编程之美--做题笔记(1)
2011-10-31 11:58
169 查看
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
#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
相关文章推荐
- c编程相关(学习笔记)
- Android编程学习笔记 之 SQLite数据存储
- TCP-IP学习笔记二:NIO的网络编程Buffer简单使用
- [Linux网络编程学习笔记]FIFO的创建和使用
- Java多线程编程总结笔记——六线程的同步与锁
- 计算机科学与Python编程导论_MIT 学习笔记(四)
- JAVA Socket 编程学习笔记(一)
- java编程思想阅读笔记(二)访问权限控制和复用类
- Java并发编程艺术笔记之一二章
- 面向对象高级编程——Python学习笔记08
- Linux Shell 编程从入门到精通-- 笔记2
- 孙鑫VC视频教程笔记之第十四课“基于TCP和UDP的Socket编程”
- 内核编程笔记
- Oracle笔记 十二、PL/SQL 面向对象oop编程
- 内核编程学习笔记(001)
- 编程相关,OJ题常见错误,及做题总结
- 编程学习笔记之消息地图
- JAVA并发编程学习笔记------对象的可见性及发布逸出
- Windows编程学习笔记(八)
- java学习笔记——网络编程