P1001 A+B Problem

· · 题解

一看到加法即可想到公差为 1 等差数列求和。

a 为末项,则:

(1 + a) \times (a \div 2) = 1+2+3+...+a

那么 a + b 为末项为:

(1 + (a+b)) \times ((a+b) \div 2)

a + b

(1 + (a+b)) \times ((a+b) \div 2)-(1 + (a+b-1)) \times ((a+b-1) \div 2)

即可。

code:

#include <bits/stdc++.h>
using namespace std;
double a, b; // int会错

double f(double s) {
    return (1 + s) * (s / 2);
}

int main() {
    cin >> a >> b;
    cout << int(f(f(a + b) - f((f(f(a + b) - f(a + b - 1)) - f(a + b - 1)) - 1)) - f(a + b - 1)); // 理论上来说这里叠多少层都可以
    return 0;
}