原题地址: [ http://acm.hdu.edu.cn/showproblem.php?pid=1001 ]
代码地址: [ http://download.csdn.net/detail/angryn00b/5053138 ]
Problem Description
计算1~n数的总和 Sum(n) = 1 + 2 + 3 + ... +n
Input
输入一组为n的数字 每行一个
Output
每行输出一个数的总和 并且在后面增添一个空行 你必须假设结果是一个32位的有符号整数
Sample Input
1
100
Sample Output
1
5050
#include <iostream>
using namespace std;
int main(void)
{
int n;
while (cin >> n)
{
if (n % 2 == 0)
cout << (n/2)*(n+1) << endl << endl;
else
cout << ((n+1)/2)*n << endl << endl;
}
return 0;
}
AC:
1. 公式 (首项+末项)* 项数 / 2 例: (1+n)* n / 2 【计算1~n的总和】
2. 处理32位有符号整数的结果:
由于公式n*(n+1)/2
n*(n+1) 比较容易造成溢出
改进方法就是在两数进行 乘法运算 处理之前 进行除法运算
这里有2种处理方法 而且分别适合处理奇数和偶数
适合处理奇数的((n+1)/2)*n
适合处理偶数的(n/2)*(n+1)