1001Sum Problem

Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
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
",sum);
     printf("
");
    }
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("

");
        }       
    }
}
原文地址:https://www.cnblogs.com/LZYY/p/3306585.html