-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path598A_Tricky_Sum.cpp
More file actions
57 lines (45 loc) · 1.85 KB
/
598A_Tricky_Sum.cpp
File metadata and controls
57 lines (45 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* A. Tricky Sum
time limit per test 1 second
memory limit per test 256 megabytes
In this problem you are to calculate the sum of all integers from 1 to n, but you should take all powers of two with minus in the sum.
For example, for n = 4 the sum is equal to - 1 - 2 + 3 - 4 = - 4, because 1, 2 and 4 are 20, 21 and 22 respectively.
Calculate the answer for t values of n.
Input
The first line of the input contains a single integer t (1 ≤ t ≤ 100) — the number of values of n to be processed.
Each of next t lines contains a single integer n (1 ≤ n ≤ 109).
Output
Print the requested sum for each of t integers n given in the input.
Examples
Input:
2
4
1000000000
Output:
-4
499999998352516354
Note:
The answer for the first sample is explained in the statement.
*/
#include <iostream>
using namespace std;
void solve() {
long long n;
cin >> n;
// Calculate the sum of the first n integers
long long totalSum = (n * (n + 1)) / 2;
// Subtract the powers of 2
long long power = 1;
while (power <= n) {
totalSum -= 2 * power; // Subtract powers of 2 twice
power *= 2; // Move to the next power of 2
}
cout << totalSum << "\n";
}
int main() {
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}