ACM1001:Sum Problem
程序员文章站
2022-10-18 11:45:09
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.
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
把两个相同的自然数列逆序相加
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;
}
推荐阅读
-
sum(case when then)(判断男女生的个数)
-
sql中count或sum为条件的查询示例(sql查询count)
-
linux比较两个文件是否一样(linux命令md5sum使用方法)
-
mysql踩坑之limit与sum函数混合使用问题详解
-
Python中使用md5sum检查目录中相同文件代码分享
-
[codewars_python]Sum of Digits / Digital Root
-
HDU 2256Problem of Precision(矩阵快速幂)
-
cfE. Ehab and a component choosing problem(贪心)
-
基于Python中求和函数sum的用法详解
-
对python中array.sum(axis=?)的用法介绍