题目描述
编写程序,读入一个整数N。若N为非负数,则计算N 到2N 之间的整数和;若N为一个负数,则求2N 到N 之间的整数和。
输入格式
第一行表示样例数m,接下来m行每行一个整数N,N的绝对值不超过100。
输出
输出m行,每行表示对应的题目所求。
样例输入
2
2
-1
样例输出
9
-3
错误的代码:
#include<iostream>
using namespace std;
void main()
{
int m,i,n,sum=0;
cin>>m;
while(m--)
{
cin>>n;
if(n>=0)
{
for(i=n;i<=2*n;i++)
{
sum+=i;
}
cout<<sum<<endl;
}
if(n<0)
{
for(i=2*n;i<=n;i++)
{
sum+=i;
cout<<i<<endl;
}
cout<<sum<<endl;
}
}
}
正确的代码:
#include<iostream>
using namespace std;
void main()
{
int m,i,n,sum;
cin>>m;
while(m--)
{
cin>>n;
if(n>=0)
{
sum=0;
for(i=n;i<=2*n;i++)
{
sum+=i;
}
cout<<sum<<endl;
}
if(n<0)
{
sum=0
for(i=2*n;i<=n;i++)
{
sum+=i;
cout<<i<<endl;
}
cout<<sum<<endl;
}
}
}
原因是:sum在多次循环中的值都可能在不停地改变,而题中要求是每次输入时,sum的值均为0,可我却以为第一次将sum置为0就行了,忘记了管循环体里面发生的事。