这是针对codechef问题的问题(问题代码:INTEST)的解决方案的代码片段。问题是在运行时处理(找出可被k整除的数字)每秒至少2.5MB的输入数据。该解决方案的作者最初使用此
声明了缓冲区uint8_t g_buffer[256 * 1024];
然后使用
读取输入read(0, p, sizeof(g_buffer)) //function of unistd.h
之后
unsigned int i = 0, v;
for (; i < in; ++i) {
if (pend - p < 16)
{
memcpy(pbegin, p, pend - p);
int r = read(0, pbegin + (pend - p), sizeof(g_buffer) - (pend - p));
if (r < 32 * 1024) usleep(1000);
pend = pbegin + (pend - p) + r;
p = pbegin;
}
for (v = 0; *p >= '0' && *p <= '9';++p )
v = v * 10 + (*p - '0');
if (*p < '0' || *p > '9') { ++p;
if (*p < '0' || *p > '9') { ++p;
}}
if (v % ik == 0) ++n;
}