月之数

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

其实这就是一找规律的题目。
需要满足的条件有:
1、首位必须是1,这个条件很好找,n二进制数有多少个,就首先要在月之数里面加上2^(n-1)(每个二进制数首位都为1)
2、首位解决了,就是后面的位。后面的位0和1出现的概率一样。后面一共会出现2^(n-2)*(n-1)
所以总共是:月之数 = 2^(n-1)+2^(n-2)*(n-1) = 2^(n-2)*(n+1)

第一步:得到它的二进制位数n;

第二步:统计n位二进制数的个数m;公式(2^n-1)-2^(n-1)+1

第三步:结果为m + m*(n-1)/2。

举例:

3位二进制数共有(2^3-1)-2^2+1=4个,月之数为4 + 4*(3-1)/2 = 8。

4位二进制数共有(2^4-1)-2^3+1=8个,月之数为8 + 8*(4-1)/2 = 20。

1、先在控制台输入想要查看月之数的数
2、得到这个数将它进行二进制转换
3、再将转换后的数字分别再进行二进制转换
4、将得到的数字拼接成字符串
5、然后对这个字符串进行查询,逢1记录一个
6、最后得到记录总共有多少个1就行了