我試圖從編碼網站解決方案中瞭解代碼,但無法弄清楚很多事情。我能理解的BIT和分域的一部分,但無論如何我不明白我在下面寫下來的:
這段代碼的來源是http://www.codechef.com/viewsolution/1816336
這將是真正有用的,如果有人解釋,而不是使用標準中定義的概念輸入輸出功能,爲什麼我們往往會使用這些:
瞭解C++程序的代碼
char ioSpace[500000 * 17 + 128];
unsigned popcnt(unsigned x)
{
#ifndef ONLINE_JUDGE
return __builtin_popcount(x);
#else
unsigned ret;
asm("popcntl %1, %0;":"=r"(ret) :"r"(x));
return ret;
#endif
}
unsigned readUInt(char*& readPos)
{
unsigned num = 0;
unsigned c;
while ((c = *readPos++) >= '0')
num = num * 10 + (c - '0');
return num;
}
template<unsigned D>
void writeDigit(char*& writePos, unsigned& advance, unsigned& num)
{
unsigned digit = num/D;
num %= D;
if (digit)
advance = 1;
*writePos = digit + '0';
writePos += advance;
}
void writeUInt(char*& writePos, unsigned num)
{
unsigned advance = 0;
writeDigit<100000>(writePos, advance, num);
writeDigit<10000>(writePos, advance, num);
writeDigit<1000>(writePos, advance, num);
writeDigit<100>(writePos, advance, num);
writeDigit<10>(writePos, advance, num);
advance = 1; // for zero number
writeDigit<1>(writePos, advance, num);
*writePos++ = '\n';
}
然後在主要輸入功能:
read(STDIN_FILENO, ioSpace, sizeof(ioSpace));
燦有人向我解釋整個過程,因爲我一直在試圖將這些樣式融入到我的C++編程中,並且由於缺乏理解而不可避免地失敗了。
我認爲自己是一個相當能幹的程序員(畢竟,我已經做了30多年的編程工作)。我完全不知道這個代碼是要解決什麼問題。這可能是完美的解決方案,但我懷疑它。 – 2013-02-11 14:11:05