poj3252Round Numbers(数学问题)

2017年05月02日 8点热度 0人点赞 0条评论

大致题意:

输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少个Round number

所谓的Round Number就是把一个十进制数转换为一个无符号二进制数,若该二进制数中0的个数大于等于1的个数,则它就是一个Round Number

注意,转换所得的二进制数,最高位必然是1,最高位的前面不允许有0

#include
#include
#include
using namespace std;
int c[33][33];//把组合数打表
int bin[35];//10进制n的二进制数
int a,b;
void play_table(){
	for(int i=0;i<33;i++)
	c[i][0]=1;
	for(int i=1;i<33;i++)
	for(int j=1;j<=i;j++)
	c[i][j]=c[i-1][j-1]+c[i-1][j];
}
void dec_to_bin(int n){
	bin[0]=0;//记录二进制位数,当然n要大于0 
	while(n){
		bin[++bin[0]]=n&1;
		n>>=1;
	}
}
int round(int n){
	int sum=0;
	dec_to_bin(n);
	//计算比n的十进制位数少的 
	for(int i=1;i0;i--)
	if(bin[i])//如果是1,则要么变成0,要么选择不变 
		for(int j=(bin[0]+1)/2-(zero+1);j
未经允许不得转载!poj3252Round Numbers(数学问题)

update

纸上得来终觉浅, 绝知此事须躬行。