更高效的 CPP 代码
more efficient cpp code
我正在尝试从站点 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;
}
如果运行多次,真正的性能影响实际上来自"endl",因为虽然它在末尾添加了"",但它也会刷新流。任何其他微优化充其量都是毫无意义的,我相信编译器足够聪明,可以将足够快的代码放在它的位置。
编辑:如果您真的迫切需要潜在的性能提升,也可以增加std::ios::sync_with_stdio(false);
。这会阻止 C 样式流之间的同步。请参阅:同步
与其进行比较看看哪个更大,哪个需要更多时间,不如忘记哪个更大并计算差异:cout << a-b << ends;
如果b
大于a
那么是的,你最终会得到一个负面的结果。在这种情况下,将其乘以 -1。我主要用 C 语言工作,但我认为在 C++ 中,它看起来像这样:首先将计算结果存储在变量"x"long long int x = a-b
中,然后if (x < 0) { x *= -1 ;}
。如果我的代码正确,这应该有效;我不确定它是否会更快,但绝对值得一试。
编辑:或者,就像@user64322说的,你可以做与上面相同的操作,但不是乘以-1,而是取绝对值,这是相同的,但更快。
除了其他人的建议之外,您可以做的一件显而易见的事情是在启动时使用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;
}
相关文章:
- C++代码以测试另一个.cpp如果可以编译它
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 如何将代码划分为多个.cpp文件 C++.
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- 如何将默认代码添加到我在 vim 中打开的每个 cpp 文件?
- 无法使用犰狳运行编译的 cpp 代码,因为 dyld:库未加载
- Windows Toast 通知不适用于 MS CPP 示例代码
- 如何大致将 cpp 代码结构转换为 python
- 如何检测 cpp 代码中的 openvino 设备
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- 使用指针编译代码后,.cpp文件将变为随机字符
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- Cpp代码故障(显示意外数字)
- CPP代码中出现FileNotFound异常
- 为什么代码会崩溃?(在CPP中)
- 在.cpp文件中定义方法而不是在 C++ 的 .h 文件中定义方法时,如何提高代码的性能?
- 如何使用 AIDEL-CPP 生成 .aidl 到 C++ 代码
- 代码块始终在项目中运行 main.cpp
- CPP DLL 自定义操作代码在安装过程中未执行