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

vuo*_*len 7 c c++ printf cout

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

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

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

这是我的C代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

所以我的算法定义在get_bit.服务器在我的程序上运行3个不同的测试,具有不同的值,大多数增加以使程序运行更长时间.

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

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

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;
}
Run Code Online (Sandbox Code Playgroud)

当我提交此代码时,所有测试都在几百毫秒内完美运行.请注意,我没有改变我的算法,get_bit只改变了打印.

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

先感谢您.

cie*_*woj 6

这可能是因为你的代码可能(见注释)不正确.你不能使用%u带有scanf64位整数.

在这里查看第三个表http://www.cplusplus.com/reference/cstdio/scanf/.您应该使用某物像%llu.

  • 这可能会导致`n`的下半部分被`scanf()`设置,而上部则处于某个(看似)随机值,造成远,太多的循环迭代(反之亦然). (4认同)
  • 正确的标题是`<inttypes.h>`并且宏应该是'SCNu64`用于`scanf()`(如果打印`uint64_t`,则为'printf()`的'PRIu64`,代码不是).因此,如果应该是`scanf("%"SCNu64,&k);`在所有平台上都是正确安全的(支持标准C` <inttypes.h>`). (3认同)