ACM题目
错误信息:Time limit Exceeded
如何改正能使代码通过
从l到r,用等差数列求和,for遍历的时候从数字1开始遍历,每次累乘2,用和减去2i,输出最后的结果就可以了。
运行结果:
代码:
#include <stdio.h>
int main()
{
int q;
scanf("%d", &q);
while (q--)
{
long l, r, sum = 0, i;
scanf("%ld %ld", &l, &r);
sum = (r - l + 1) * (l + r) / 2; //等差数列求和公式
for (i = 1; i <= r; i *= 2)//i从数字1开始(注意不是英文字母l)
{
if (i < l)
continue;
else
sum -= 2 * i; //从和中减去并取反求和
}
printf("%ld\n", sum);
}
return 0;
}
可能是调用超时导致的,把q l r都设置小一点先试一遍。比如q=2,l=1,r=1
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!