HDU 2502 月之数

月之数

Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 103   Accepted Submission(s) : 52

Font: Times New Roman | Verdana | Georgia

Font Size:

Problem Description

当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数。
如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数。所有的n二进制数中,1的总个数被称为n对应的月之数。
例如,3二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),他们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8。

Input

给你一个整数T,表示输入数据的组数,接下来有T行,每行包含一个正整数 n(1<=n<=20)。

Output

对于每个n ,在一行内输出n对应的月之数。

Sample Input

3
1
2
3

Sample Output

1
3
8

Source

《ACM程序设计》短学期考试_软件工程及其他专业

思路:

               这是一个规律题,因此,在做这道题之前需要我们先找好规律。输入的数是二进制的位数a,然后我们可以找出位数a对应的二进制数有多少个,进而找出1和二进制数的个数之间的关系,进而求出a对应的1的个数!

代码:

/* 
***************************************************************************  
**** 
**文件名:HDU2502201507231609 
**创建人:杜新新 
**日  期:2015年7月23日16:09:22 
**功能描述:通过找规律来计算给定二进制的位数,例如:二进制数(111)对应的二进制位数为3;求数字1的个数 
**版  本 :Dev c++  
**修改人:杜新新 
**修改内容:
**日 期:
**** 
******************************************************************************   
*/  
#include 
int main()
{
	int n;
	int a,s,t,i;
	scanf("%d",&n);
	while(n--)
	{
		t=1;
		//s=0;
		scanf("%d",&a);
		for(i=1;i


 

你可能感兴趣的:(hd,oj)