关于#C语言#的问题,如何解决?

ACM题目
错误信息:Time limit Exceeded
如何改正能使代码通过

img

img

从l到r,用等差数列求和,for遍历的时候从数字1开始遍历,每次累乘2,用和减去2i,输出最后的结果就可以了。
运行结果:

img

代码:

#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

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632