POJ 2924 Gauß in Elementary School(我的水题之路——n到m的连和)

Gauß in Elementary School
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7873   Accepted: 3530

Description

Johann Carl Friedrich Gauß (1777 – 1855) was one of the most important German mathematicians. For those of you who remember the Deutsche Mark, a picture of him was printed on the 10 – DM bill. In elementary school, his teacher J. G. Büttner tried to occupy the pupils by making them add up the integers from 1 to 100. The young Gauß surprised everybody by producing the correct answers (5050) within seconds.

Can you write a computer program that can compute such sums really quickly?

Given two integers n and m, you should compute the sum of all the integers from n to m. In other words, you should compute

Input

The first line contains the number of scenarios. Each scenario consists of a line containing the numbers n and m (−109 ≤ n ≤ m ≤ 109).


Output

The output for every scenario begins with a line containing “Scenario #i:”, where i is the number of the scenario starting at 1. Then print the sum of all integers from n to m. Terminate the output for the scenario with a blank line.

Sample Input

3
1 100
-11 10
-89173 938749341

Sample Output

Scenario #1:
5050

Scenario #2:
-11

Scenario #3:
440625159107385260

Source

TUD Programming Contest 2006, Darmstadt, Germany

求从n到m的所有元素之和。

用__int64,套用连和公式:
sum = (n+m) * (m - n) / 2;

注意点:
1)输入输出格式%I64d。
2)n、m也要用__int64类型。

代码(1AC):
#include <cstdio>
#include <cstdlib>
#include <cstring>

int main(void){
    int ii, casenum;
    __int64 n, m, i;
    __int64 sum;

    scanf("%d", &casenum);
    for (ii = 1; ii <= casenum; ii++){
        scanf("%I64d%I64d", &n, &m);
        if (n > m){
            i = m;
            m = n;
            n = i;
        }
        sum = (n + m) * (m - n + 1) / 2;
        printf("Scenario #%d:\n%I64d\n\n", ii, sum);
    }
    return 0;
}


你可能感兴趣的:(POJ 2924 Gauß in Elementary School(我的水题之路——n到m的连和))