杭电acm1001,我错哪了?
#include<stdio.h>main(){intn,k=1;longa,sum;scanf("%d",&n);while(n--){scanf("%ld",&a);...
#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);
}
} 展开
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);
}
} 展开
3个回答
展开全部
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(cin>>n)
{
int a=0,i;
for(i=1;i<=n;i++)
a+=i;
cout<<a<<endl<<endl;
}
return 1;
}
/*
//此题一般情况可用公式求解,但上传到ACM上,为错误,.
若用公式求解,其中while部分改为:
while(cin>>n)
{
n=n*(n+1)/2;
cout<<n<<endl<<endl;
}
错误原因: 在公式中 会先计算 n+1 再乘以 n ,若n的初值足够大的时候,此时的 n 已经超出int的范围,
解决方案: 把n的类型定义为 long long n; (注:_int64 同等于 long long 但在正规的ACM竞赛中,可能会出错)
*/
因为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(cin>>n)
{
int a=0,i;
for(i=1;i<=n;i++)
a+=i;
cout<<a<<endl<<endl;
}
return 1;
}
/*
//此题一般情况可用公式求解,但上传到ACM上,为错误,.
若用公式求解,其中while部分改为:
while(cin>>n)
{
n=n*(n+1)/2;
cout<<n<<endl<<endl;
}
错误原因: 在公式中 会先计算 n+1 再乘以 n ,若n的初值足够大的时候,此时的 n 已经超出int的范围,
解决方案: 把n的类型定义为 long long n; (注:_int64 同等于 long long 但在正规的ACM竞赛中,可能会出错)
*/
展开全部
我做出来啦~~~
#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个代替,(*^__^*) 嘻嘻……,辛苦啊
#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);
你没有换行
你没有换行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询