gpt4 book ai didi

c++ - 为什么 while(scanf ("%lld", &num) == 1) 比 while(scanf ("%lld", &num)) 快

转载 作者:行者123 更新时间:2023-11-27 22:49:08 25 4
gpt4 key购买 nike

我试图通过 Uva Online Judge 解决一个问题。问题编号是 10302。我接受的代码如下。

 #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);
}

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

#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);
}

唯一的区别是

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

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

我认为第二个更快。因为第一个添加额外的运算符 == 来检查相等性。这里右侧已经是 true (1) 并且当 scanf() 接受输入时,左侧是 true。如果双方都为 true,则 while 循环为 true。我认为这是额外的时间损失。

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

谁来解释一下。

最佳答案

您的第二个版本有一个无限循环

scanf当输入用完时返回 EOF(可能是 -1 的宏,尽管这在某种程度上取决于您的系统),并且此返回值满足您的要求条件。

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

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

关于c++ - 为什么 while(scanf ("%lld", &num) == 1) 比 while(scanf ("%lld", &num)) 快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39536050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com