超級強的 運算 2的階乘判斷

2021-08-20 13:31:46 字數 775 閱讀 2702

話說今天遇到了乙個問題,判斷乙個數是否是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...