C++ 更高效的cpp代码

C++ 更高效的cpp代码,c++,algorithm,C++,Algorithm,我正试图从open.kattis.com网站解决一个问题 问题是取两个从0到10^15的非负整数,然后计算差值。我写了这个,它计算正确,但它不够快,我如何才能使它更快 #include <iostream> #include <stdio.h> using namespace std; int main() { long long int a, b; while(a != 0){ cin >> a >> b;

我正试图从open.kattis.com网站解决一个问题

问题是取两个从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;
}
#包括
#包括
使用名称空间std;
int main(){
长内点a,b;
while(a!=0){
cin>>a>>b;

如果(a>b){cout与其进行比较以确定哪个更大,哪个需要更多的时间,您可以忽略哪个更大,然后计算差异:
cout如果多次运行,真正的性能影响实际上来自'endl',因为它在末尾添加了一个'\n',同时也会刷新流微生物学优化充其量是毫无意义的,我相信编译器足够聪明,可以将足够快的代码放在适当的位置


编辑:如果您真的非常渴望潜在的性能提高,还可以添加
std::ios::sync_with_stdio(false);
。这会阻止C样式流之间的同步。请参阅:

除了其他人的建议之外,您可以做的一件显而易见的事情是在启动时使用
argv
获取命令行参数(例如,
/PrintDiffQuick 10 5
将打印
5
),而不是在等待用户输入时阻止执行

#包括
#包括
int main(int argc,常量字符**argv)
{
std::ios::与stdio同步(false);

std::cout
a
未初始化。与其检查条件,不如使用“abs(a-b)”清除
endl
可能会有帮助。请改用
“\n”
。它是出了名的重量级。最快的方法可能是使用read()绕过or的所有开销,然后自己解析字符串以提取整数(例如,使用char*p和isdigit(),尽管使用strtol可能会获得相当好的性能)。@Waxrat:或者使用。我打赌这完全被flush
endl
所掩盖。