什麼可得意的,這些都是最基礎的東西,只要理解了CPU的運作,多想一想基本上應該都能達到的,沒有好得意的。
廣永元這個時候出言問道:“阿鴻,我看得不是很懂,求平方根不是使用二分查詢法麼?”
廣永元最擅長的並不是這個方面,他畢竟是野路子出身,基礎部分還不是很紮實,林鴻的這十行程式碼,他竟然看得滿頭霧水。
他口中所說的二分查詢,其實就是牛隊迭代法的實現方式之一。
林鴻點點頭:“演算法的確是這個,不過在這裡,我使用二進位制的移位代替了乘除。你看……”
林鴻見他聽得不是很懂,於是便重新調出編譯器,下斷點,跟蹤變數的記憶體賦值,一邊操作一邊解釋:…;
“在二進位制層面上,從前向後決定每一個二進位制位上是0還是1,因此,我們可以從最高位向最低位,依次上1,看乘積結果是否大於目標數,如果大於目標數了,那一位就保留0這樣的情況下,我們上1就不用真的去計算乘法,而是將之前的結果,加上上1以前的數左移1所在位置那麼多位的兩倍,再加上上1的位置左移上1的位置……”
經過林鴻演示加解說,廣永元這才恍然大悟,後面的青年也釋然的點點頭,他雖然知道大致原理,可是在細節方面還是有些地方沒有理解,聽了林鴻完整的解釋這才瞭然。
也就是說,整個演算法林鴻使用的都是二進位制層面的運算,想不快都難,或者說,沒有哪個程式可以比他的這個演算法實現更快了。
僅僅花了二十來秒的時間就搞定第一關,並且答案如此優秀,這可是之前從來沒有碰到過的。
林鴻本來還想著見識一下後面到底出什麼題目,不過黃越在看到林鴻的這個程式之後,便直接宣佈林鴻過關了,沒有必要再繼續闖關。
這個題目,實際上是黃越親自出的,他當初給了一個標準答案,也是二進位制層面的實現,可是兩者相比之下,還是有著相當大的差距。
這雖然是最基礎的東西,但正是這些東西最是能看清楚一個人的水平。
很顯然,林鴻在這方面要比黃越更強,更別說,廣永元之前對他說