我正在尝试从网站open.kattis.com https://open.kattis.com/problems/different
解决问题问题是你从0到10 ^ 15接收两个非负整数并计算差值。我写了这个,它正确计算,但它不够快,我怎么能让它更快?
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
long long int a, b;
while(a != 0){
cin >> a >> b;
if (a > b) { cout << a-b << endl;}
else{ cout << b-a << endl;}
}
return 0;
}
答案 0 :(得分:2)
真正的性能影响,如果多次运行,实际上会来自'endl',因为虽然它最后添加'\ n',但它也会刷新流。任何其他微优化充其量都是毫无意义的,我确信编译器足够智能,可以在其中放置足够快的代码。
编辑:如果您真的非常渴望潜在的性能提升,也可以添加std::ios::sync_with_stdio(false);
。这可以防止C样式流之间的同步。请参阅:sync
答案 1 :(得分:0)
如果cout << a-b << ends;
大于{{1>,而不是进然后是的,你最终会得到一个否定的结果。在这种情况下,将它乘以-1。我主要使用C语言,但我认为在C ++中,它看起来像这样:首先将计算结果存储在一个变量&#39; x&#39; b
,然后是a
。如果我的代码是正确的,这应该有用;我不确定它是否会更快,但绝对值得一试。
编辑:或者,就像@ user64322所说,你可以像上面那样做,但不是乘以-1,只需取绝对值,这是相同的,但更快。
答案 2 :(得分:0)
除了其他人的建议之外,您可以做的一件显而易见的事情是使用argv
在启动时获取命令行参数(例如./PrintDiffQuick 10 5
将打印5
)而不是阻止执行在等待用户输入时。
#include <cinttypes>
#include <iostream>
int main(int argc, const char **argv)
{
std::ios::sync_with_stdio(false);
std::cout << std::imaxabs(std::strtoimax(argv[1], nullptr, 10) -
std::strtoimax(argv[2], nullptr, 10)) << '\n';
return 0;
}