定義函數 f(n) = -1 + 2 - 3 + 4 ... + (-1)^n * n。給定正整數 n (1 ≤ n ≤ 10^15),求 f(n)。
n = 4:-1+2-3+4 = 2n = 5:-1+2-3+4-5 = -3觀察發現:
n 為偶數時,f(n) = n / 2。n 為奇數時,f(n) = -(n + 1) / 2。證明:相鄰兩項 (-k) + (k+1) = 1。偶數項可配對,共 n/2 對,每對和為 1。奇數項最後剩單項 -n,前 n-1 項和為 (n-1)/2,總和 (n-1)/2 - n = -(n+1)/2。
#include <cstdio>
using namespace std;
int main() {
long long n;
while (scanf("%lld", &n) != EOF) {
if (n & 1) printf("%lld\n", -(n + 1) / 2);
else printf("%lld\n", n / 2);
}
return 0;
}
時間複雜度 O(1),完美通過大數據範圍限制。