首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么时间( == 1(“%lld”,&num))比while(“%lld”,&num)快

为什么时间( == 1(“%lld”,&num))比while(“%lld”,&num)快
EN

Stack Overflow用户
提问于 2016-09-16 16:18:33
回答 1查看 599关注 0票数 0

我试图解决Uva在线法官的一个问题。问题号是10302。下面给出了我接受的代码。

代码语言:javascript
复制
 #include <cstdio>

 int main()
 {
     long long int num, sum;

     while(scanf("%lld", &num) == 1)  {

        //sumOfCube(sum, num);
        //sum = (long long int)(num * num * (num + 1) * (num + 1)) / 4;
        printf("%lld\n", ((num * num) * ((num + 1) * (num + 1))) / 4);
    }

    return (0);
}

在这里我的时间限制超过了代码

代码语言:javascript
复制
#include <cstdio>

int main()
{
    long long int num, sum;


    while(scanf("%lld", &num))  {

        //sumOfCube(sum, num);
        //sum = (long long int)(num * num * (num + 1) * (num + 1)) / 4;
        printf("%lld\n", ((num * num) * ((num + 1) * (num + 1))) / 4);
    }

    return (0);
}

唯一的区别是

代码语言:javascript
复制
 while(scanf("%lld", &num) == 1)

代码语言:javascript
复制
 while(scanf("%lld", &num))

我觉得第二个更快。因为首先添加额外的操作符==来检查等式。在这里,右手边已经是true (1),当scanf()接受输入时,左手边是true。如果双方都是true,那么while循环就是真。我认为这是额外的时间损失。

但我不明白为什么法官选择第一个更快。

请给我解释一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 16:53:38

您的第二个版本有一个loop. 无限

scanf在输入不足时返回EOF (可能是-1的宏,尽管这在某种程度上取决于您的系统),并且这个返回值满足您非常松散的条件。

因为您没有编写== 1,所以对第二个代码进行“更快”的合理化是没有意义的(C++一次不会执行一个源代码字符),这是一个很好的例子,说明了为什么您应该更喜欢理解逻辑,而不是把所有的时间都花在微观优化上。

下一次在代码中放入一些调试输出,或者通过调试器运行程序。你很快就会看到发生了什么。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39536050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档