杭电acm1001,我错哪了?

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:16:17
#include<stdio.h>
main()
{
int n,k=1;
long a,sum;
scanf("%d",&n);
while(n--)
{
scanf("%ld",&a);
sum=a*(a+1)/2;
printf("%d",k);
k++;
printf("ld",sum);

}

}

我做出来啦~~~
#include<stdio.h>
int main()
{
long n,m;

while(scanf("%d",&n)!=EOF)
{
if(n%2!=0)
m=(n+1)/2*n;
else m=n/2*(n+1);

printf("%ld\n\n",m);

}
return 0;
}考虑到n*(n+1)要数据溢出,判断奇偶性的,并且输入数据不定,不能
用n个代替,(*^__^*) 嘻嘻……,辛苦啊

printf("ld",sum);

你没有换行

sum=a*(a+1)/2; //这里出了问题 注意,是出了问题,公式并没有错.
因为sum是int 32位的整型数据,当a足够大的时候,该表达式在计算 a*(a+1)
时,已经超出了 int 的范围,解决方案有两个:
一:

long sum;
改为:
long long sum;
//OK!我不知道C是怎样分的,反正在C++中 long 和 int 的字符长度是一样的.

二:
不用公式,用循环语句做.
以下是我提交的内容,仅供参考,谢谢:
我是C++爱好者,欢迎有空来我博客交流,分享.
http://hi.baidu.com/endlman

#include<iostream>

using namespace std;

int main()
{
int n;
while(ci