description
求和是一種最常見的運算,我們經常做的就是1加到n的和。例如,1加到100的和是5050。但是現在,我們稍微變動一下求和方法,對於屬於2的冪次的數,我們做的是減法,其餘仍舊做加法。例如,當n=4的時候,最後的結果應該是-1-2+3-4=-4,因為1、2、4分別是2的0次方、2的1次方、2的2次方。現在請你來計算t次這樣的運算。
input
輸入第一行是乙個正整數t,表示要進行t次運算。接下來t行,每行乙個整數n,表示要按新的求和方法計算1到n的和。
注意:1<=t<=100,1<=n<=10^9。
output
輸出t組答案,每個答案佔一行。
sample input24
1000000000
sample output
-4**:
#includeint main()
sum1+=1;
sum2=n*(n+1)/2;
sum=sum2-2*sum1;
printf("%i64d\n",sum);
} return 0;
}
思路:從1到n,中間如果該數是2的x次方的話減去它,其他的加上求和。
普通一看就能想到乙個for迴圈判斷是否是2的次方就行了,但是這道題資料比較大,所以先計算從1到n中2的次方所有數和(注意不要忘記1,1是2的0次方),然後1到n可以用n*(n+1)/2,計算和,然後減去兩次2的次方和就行了。(減去兩次是因為計算n的和時含有2的次方和)
598 範圍求和 II
給定乙個初始元素全部為0,大小為 m n 的矩陣m以及在m上的一系列更新操作。操作用二維陣列表示,其中的每個操作用乙個含有兩個正整數 a和b的陣列表示,含義是將所有符合0 i a以及0 j b的元素m i j 的值都增加 1。在執行給定的一系列操作後,你需要返回矩陣中含有最大整數的元素個數。示例 1...
598 範圍求和II JS leetCode
題目描述 給定乙個初始元素全部為 0,大小為 m n 的矩陣 m 以及在 m 上的一系列更新操作。操作用二維陣列表示,其中的每個操作用乙個含有兩個正整數 a 和 b 的陣列表示,含義是將所有符合 0 i a 以及 0 j b 的元素 m i j 的值都增加 1。在執行給定的一系列操作後,你需要返回矩...
598 範圍求和II
給定乙個初始元素全部為 0,大小為 m n 的矩陣 m 以及在 m 上的一系列更新操作。操作用二維陣列表示,其中的每個操作用乙個含有兩個正整數 a 和 b 的陣列表示,含義是將所有符合 0 i a 以及 0 j b 的元素 m i j 的值都增加 1。在執行給定的一系列操作後,你需要返回矩陣中含有最...