【题目】

奇怪数列

TimeLimit:1000MS  MemoryLimit:128MB

64-bit integer IO format:%lld

已解决 | 点击收藏

×

收藏题目

备注

 

Close确定

| 已有3人收藏了本题

Problem De ion

有一串奇怪数列如下:1 2 -3 4 -5 -6 -7 8 -9 ...
即从1-n,碰到2的次方倍则显正,其他则是负数。(2的整次方包括:1,2,4,8,16,32,64,128,....)
现在给你一个n,求出,这个数列的和。

Input

有多个输入样例,每个测试样例输入一个n,0 < n < = 1000.

该题不懂格式的可以参照一下格式:
#include
int main()
{
    ...
    while(scanf(\"%d\",&n)!=EOF){
        ...
    }
    return 0;
 }

Output

对于每一组测试数据,输出一个整数,表示这个数列的前n项的和

SampleInput

2 
3 
4

SampleOutput

3 
0 
4

【题解】

对于任意2的整次方n,n&(n-1)=0。 

比如4:100,4-1=3:011,100&011=000

【代码】

int main()
{
    int c=0;
    int n;
    while(cin>>n)
    {
        int sum=0;
        for(int i=1;i<=n;i++)
            if((i&(i-1))) sum-=i;
            else sum+=i;
        cout<<sum<<endl;
    }
    return 0;
}

 

收藏 打印