杭电oj 1001题 不知道自己哪里出错了

杭电oj 1001题

img
#include
using namespace std ;

#include <iostream>
using namespace std ;

int main (){
    int num2 ;
    int sum = 0 ;
    int num = 0 ;
    while ( cin >> num2 ){
        while( num <= num2 ){
            sum += num ;
            num++ ;
        }
        cout << sum << endl << endl ;
    }
    system ("pause") ;
    return 0 ;
}

我这提交的时候是错的
我不知道我这哪里有问题

system ("pause") ;这行删掉
第一层while循环里,sum、num没有归零

#include <iostream>
using namespace std ;
int main (){
    int num2 ;
    while ( cin >> num2 ){
        int sum=0;
        int num=0;
        while( num <= num2 ){
            sum += num ;
            num++ ;
        }
        cout << sum << endl << endl ;
    }

    return 0 ;
}
 

另外,acm不仅要求编程技巧,同时也要求数学知识。这题可以用等差数列求和公式:s=n(n+1)/2,这样执行时间更短。

#include <iostream>
using namespace std ;
int main (){
    int n ;
    while ( cin >> n ){
        cout << n*(n+1)/2 << endl << endl ;
    }

    return 0 ;
}