为什么此C / C ++代码有助于快速输入

时间:2019-05-21 16:02:02

标签: c performance

我从此链接https://www.codechef.com/viewsolution/1715623中获取了此代码 而且我不明白 scan()函数如何帮助快速输入

#define g getchar_unlocked()
int scan()//fast input output
{
    int t=0;
    char c;
    c=g;
    while(c<'0' || c>'9')
        c=g;
    while(c>='0' && c<='9')
    {
        t=(t<<3)+(t<<1)+c-'0';
        c=g;
    }//end fast input output
    return(t);
}

2 个答案:

答案 0 :(得分:2)

用户定义函数scan()使用lib函数getchar_unlocked(),它比getchar()和任何其他标准输入方法快,因为它不是线程安全的。。

内部函数循环仅用于考虑数字输入(并且使用移位运算符而不是相乘来获得额外的性能增益,必须在使用前进行测试)。

此函数包含可能的int溢出。

答案 1 :(得分:1)

我认为与getchar基本上是atoi。它会忽略前导的非数字字符,然后创建字符串数字的整数,并在数字停止时退出。扫描可能不是正确的名称,应该是Atoi()或ScanNum()?由于整数溢出问题,当整数较大时,可能不适用于该整数。

如果这比atoi()快,我会感到惊讶,但不确定他们为什么也不使用isdigit()。

与加利福尼亚大学代码不同,它不检查符号,也不使用register关键字。