1001Sum Problem
Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 224457 Accepted Submission(s): 55071
Total Submission(s): 224457 Accepted Submission(s): 55071
Problem Description
Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge).
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
水题,不过有个陷阱,坑了我好久啊,一个边界溢出问题,要注意。
下面是AC代码:
用这种方法写是没什么问题的,注意用long类型:
#include<stdio.h> int main () { long int n,i,sum; while(scanf("%ld",&n)!=EOF) { sum=0; for(i=1;i<=n;i++) { sum+=i; } printf("%ld\n",sum); printf("\n"); } return 0; }
但是如果用求和公式的话,一定要这样,防止边界溢出,考虑项数除以2 是否为0
#include<iostream> using namespace std; int main() { int s,n; while(cin>>n) { s=(n%2==0?n/2*(n+1):(n+1)/2*n); cout<<s<<endl<<endl; } }
java版就大的多
import java.util.*; public class Main { public static void main(String[] args) { int sum,i,n; Scanner cin = new Scanner(System.in); while(cin.hasNext()) { sum =0; n=cin.nextInt(); for(i=0;i<=n;i++) {sum+=i;} System.out.println(sum); System.out.print("\n\n"); } } }