C ++打印速度比C快得多

时间:2016-10-06 19:57:14

标签: c++ c printf cout

我正在网上参加一个小型的编程竞赛。基本上我所做的就是解决任务,编写算法并发送我的代码,由竞争对手的服务器自动评估。

服务器接受各种编程语言。所有任务基本上都要求程序从终端获取输入并输出正确的终端。所以在竞争对手的网站上,我注意到他们支持的语言之一是C ++,他们使用g ++来编译它。好吧,因为我不是那么流利的C ++,而不是C,我以为我会用C回复我的答案。

这对第一项任务非常有用。但是在第二个任务中,我经常达到为程序执行时间设置的限制(2秒)

这是我的C代码:

POLLPRI

所以我的算法在#include <inttypes.h> #include <stdio.h> #include <stdint.h> #include <math.h> #include <stdlib.h> uint8_t get_bit(uint64_t k) { ... } int main(int argc, char *argv[]) { uint64_t n; uint64_t k; scanf("%u", &n); uint64_t i; for (i = 0; i < n; i++) { scanf("%u", &k); printf("%d\n", get_bit(k)); } return 0; } 中定义。 服务器在我的程序上运行3个不同的测试,具有不同的值,大多数增加以使程序运行更长时间。

但是,由于运行时间超过2秒,因此C中的此代码未通过测试。几个小时尝试不同的解决方案无济于事,我终于尝试使用一些不同的打印方法将我的代码作为C ++提交。

这是我的C ++主要版本(程序的其余部分基本保持不变):

get_bit

当我提交此代码时,所有测试都在几百毫秒内完美运行。请注意,我没有在int main(int argc, char *argv[]) { uint64_t n; uint64_t k; cin >> n; uint64_t i; for (i = 0; i < n; i++) { cin >> k; cout.operator<<(get_bit(k)) << endl; } return 0; } 中更改我的算法,只修改了打印。

为什么在C ++中打印比在C中打印快得多? (在我的情况下,速度提高了10倍) 如果可能的话,我怎样才能在C中实现这些速度?您可能会注意到,我不熟悉C ++,之前的代码主要是复制粘贴。出于这个原因,我更愿意用C编程。

提前谢谢。

1 个答案:

答案 0 :(得分:6)

可能是因为您的代码 可能(请参阅注释)不正确。您无法将%uscanf和64位整数一起使用。

在此处查看第三个表http://www.cplusplus.com/reference/cstdio/scanf/。你应该像%llu一样使用。