我试图解决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
循环为真。我认为这是一个额外的时间损失。
但是我无法理解为什么法官选择第一个更快。
任何人请解释一下。
答案 0 :(得分:4)
您的第二个版本有无限循环。
scanf
返回EOF
(可能是-1
的一个宏,虽然这在某种程度上取决于你的系统)当输入用尽时,这个返回值很令你满意条件松散。
你对第二个人的合理化是更快&#34;因为你没有写== 1
没有意义(C ++一次不执行一个源代码字符!),这就是为什么你应该更喜欢理解逻辑<的一个很好的例子/而不是花费你所有的时间来尝试微优化。
下次在代码中添加一些调试输出,或者通过调试器运行程序。你很快就能看到发生了什么。