Problem Description In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n. Input The input will consist of a series of integers n, o ...
Problem Description In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n. Input The input will consist of a series of integers n, one integer per line. Output For each case, output SUM(n) in one line, followed by a blank line. You may assume the result will be in
the range of 32-bit signed integer. Sample Input 1 100 Sample Output 1 5050 ------------------------------------------------------------------------------------------------------------------ Sn = n*(n+1)/2
把兩個相同的自然數列逆序相加
2Sn=1+n + 2+(n-1) + 3+(n-2) + ... n+1
=n+1 +n+1 + ... +n+1
=n*(n+1)
Sn=n*(n+1)/2
另,
m到n的自然數之和:Smn=(n-m+1)/2*(m+n)
(n>m)
Smn=Sn-S(m-1)
=n*(n+1)/2 -(m-1)*(m-1+1)/2
={n*(n+1) - m(m-1)}/2
={n*(n+1) - mn + m(1-m) + mn }/2
={n*(n-m+1)+ m(1+ n-m)}/2
=(n+m)(n-m+1)/2 註意:雖然題目說sum不會大於32位,但是n*(n+1)會大於32位。
#include <stdio.h> #include <stdlib.h> int main() { long long n; //freopen("F:\\input.txt", "r", stdin); while (scanf("%lld", &n) != EOF) { printf("%lld\n\n", n * (n + 1) / 2); } //freopen("CON", "r", stdin); //system("pause"); return 0; }