序列求和
求和要注意两点:
1.数据规模大小
2.代码运行效率
问题描述
求1+2+3+…+n的值。
输入格式
输入包括一个整数n。
输出格式
输出一行,包括一个整数,表示1+2+3+…+n的值。
样例输入1
4
样例输出1
10
样例输入2
100
样例输出2
5050
数据规模与约定
1 <= n <= 1,000,000,000
n=1,000,000,000的值超出32位整数int范围
_序列求和,最先想到的肯定是循环n2,但当数据规模很大时,暴力循环就会导致超时,所以我们就要转变思维,想想去算这类式子有什么简单的算法。
就本题而言,我们可以利用等差数列求和公式sum=(1+n)n/2。
因为最大值已超过32位整型值,所有我们做运算时要在64位整数下进行。
unsigned long int 0~4,294,967,295 (32位操作系统)
在C/C++中,64位整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种,而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式。
#include <iostream>
using namespace std;
int main()
{
__int64 n, sum; //long long n, sum;
cin>>n; //VC6.0下必须用scanf("%l64u", &n);
sum=(1+n)*n/2;
cout<<sum<<endl; //VC6.0下必须用printf("%l64u", n);
return 0;
}