我从此链接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);
}
答案 0 :(得分:2)
用户定义函数scan()
使用lib函数getchar_unlocked()
,它比getchar()
和任何其他标准输入方法快,因为它不是线程安全的。。
内部函数循环仅用于考虑数字输入(并且使用移位运算符而不是相乘来获得额外的性能增益,必须在使用前进行测试)。
此函数包含可能的int溢出。
答案 1 :(得分:1)
我认为与getchar基本上是atoi。它会忽略前导的非数字字符,然后创建字符串数字的整数,并在数字停止时退出。扫描可能不是正确的名称,应该是Atoi()或ScanNum()?由于整数溢出问题,当整数较大时,可能不适用于该整数。
如果这比atoi()快,我会感到惊讶,但不确定他们为什么也不使用isdigit()。
与加利福尼亚大学代码不同,它不检查符号,也不使用register关键字。