關於如何判斷一個數是否是2的整數次方的問題
阿新 • • 發佈:2018-12-12
有這樣的一道題:
有一串奇怪數列如下:1 2 -3 4 -5 -6 -7 8 -9 ... 即從1-n,碰到2的次方倍則顯正,其他則是負數。(2的整次方包括:1,2,4,8,16,32,64,128,....) 現在給你一個n,求出,這個數列的和。
直接來判斷一個數是不是2的整數次方並不好判斷,此時我們可以用位運算來快速解決。
我們把2的整數次方的數化成一個二進位制數,會發現,所有這樣的二進位制數第一個數都是1,後面的數都是0;而2^n-1化成二進位制數第一個數都是0,後面的數都是1。即if((i&(i-1))==0) 若if裡面為真,則i就是2的整數次方。
所以這道可以用下面的程式碼AC:
#include<bits/stdc++.h> using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF) { int i,sum=0; for(i=1;i<=n;i++) { if((i&(i-1))==0) sum=sum+i; else sum=sum-i; } printf("%d\n",sum); } return 0; }