我试图解决Uva在线法官的一个问题。问题号是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循环就是真。我认为这是额外的时间损失。
但我不明白为什么法官选择第一个更快。
请给我解释一下。
发布于 2016-09-16 16:53:38
您的第二个版本有一个loop. 无限
scanf在输入不足时返回EOF (可能是-1的宏,尽管这在某种程度上取决于您的系统),并且这个返回值满足您非常松散的条件。
因为您没有编写== 1,所以对第二个代码进行“更快”的合理化是没有意义的(C++一次不会执行一个源代码字符),这是一个很好的例子,说明了为什么您应该更喜欢理解逻辑,而不是把所有的时间都花在微观优化上。
下一次在代码中放入一些调试输出,或者通过调试器运行程序。你很快就会看到发生了什么。
https://stackoverflow.com/questions/39536050
复制相似问题