話說今天遇到了乙個問題,判斷乙個數是否是2的階乘,我左思右想的寫了乙個函式,就在我快寫完的時候,
突然發現了乙個驚天的秘密:嚇到自己了。。。
2 , 4 , 8 , 16 , 32 ,等等都是2的階乘,
如果把它們換算成 二進位制
10 ,100, 1000, 10000等等,會發現每個數的第一位都是 1
先解釋一下&運算
1&1=1;
0&0=0;
1&0=0;
0&1=0;
好的現在開始揭秘了!!!
如果將二進位制的數字減一(舉個例子)
8的二進位制是 1000 減去一 是 111
111 是 7的二進位制
那麼8&7 == 1000&0111
1000
0111
結果正好是0!!!
注意:這不是巧合,這不是巧合,這不是巧合!
所有的2的階乘都是這樣的
那麼其它非2的階乘數字,是否有這樣的情況呢?
答案是:沒有(除了0),不論怎麼測試,非2的階乘數字如果做這種運算,答案不可能是0,
達不到每個二進位制位上的數字均是相反的
太神奇了,,,,
if (((n-1)& n)==0 && (n!=0))
system.out.println("數字n是2的階乘");
else
system.out.println("數字n不是2的階乘");
注:以為自己是第乙個發現的,沒想到搜尋網上有很多,有點小失落!!! N的階乘 大數運算
題目位址 description given an integer n 0 n 10000 your task is to calculate n one n in one line,process to the end of file.for each n,output n in one line...
模擬乘法運算之N的階乘(大數階乘)
基於aoj 787和51nod 1057討論n的階乘問題。在這裡,討論的大數階乘的演算法主要是模擬乘法運算,我們用乙個乘數和另乙個乘數各位相乘,則該乘積的個位為結果的一位,該乘積的高位均為進製。需要注意的是,各位乘完後,進製可能是個多位數,則該多位數可以直接輸出。我們可以設定乙個陣列w k 來儲存乘...
2的階乘(高精度)
方法一 完全模擬豎式計算,沒計算一位就處理相應的結果 方法二 先將每一位都乘以2,進行計算,等全都乘完以後在進行相應的處理 方法一的 include include include include include include include include include include def...