大众信息网

1*2*3+3*4*5+...+99*100*101

关注:196  答案:5  手机版
解决时间 2021-01-17 12:06
main()
{
int i,sn;
sn=0;
for(i=1;i<=99;)
{
sn+=i*(i+1)*(i+2);
i+=2;
}
printf("sn=%d",sn);
}
得到26322
后来我定义 sn 为 unsigned long 22930
正确答案好像是13002450
帮我看下要怎么改 谢谢
最佳答案
#include
void main()
{
int i,sn;
sn=0;
for(i=1;i<=99;i++,i++)
{
sn+=i*(i+1)*(i+2);
}
printf("sn=%d",sn);
}
全部回答
这个涉及到大整数的处理,需要特殊编程的。这个结果会是个天文数字。如果实在要做,可以尝试使用浮点数。
解决方法: 1. 使用大整数,实质上是用字符来描述数字,这个大整数自己去实现 2. 分段操作和计算,超过int(double)等上线时转换为字符
求:1*2 2*3 3*4 ...... 99*100之和 1*2 2*3 3*4 4*5 5*6 6*7 7*8 …… 98*99 99*100 =1*2 (2*3 3*4) (4*5 5*6) (6*7 7*8) …… (98*99 99*100) =2*1² 2*3² 2*5² 2*7² 2*9² …… 2*99² =2*(1^2 3^2 5^2…… 99^2) 而1² 3² 5² ..........(2n-1)²=n(4n^2-1)/3 这里 n=50 1-100所有奇数的平方和=50*(4*50^2-1)/3=166650 所以1*2 2*3 3*4 4*5 5*6 6*7 7*8 …… 98*99 99*100 =166650*2=333300
你的算法没有问题 但是 printf("sn=%d",sn); 貌似有问题 我在Java 中是这样写的 int i,sn; sn=0; for(i=1;i<=99;){ sn=i*(i+1)*(i+2); i=i+2; } System.out.println(sn);//在控制台输出sn 最终sn 应该是 999900
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!