每日演算法之a b和尾部零的演算法

2021-08-18 07:30:02 字數 840 閱讀 6785

a=1,b=2,不使用加減乘除,來實現a+b的效果。(可以使用位操作符)

演算法思路:

①1+1=0,0+0=0,1+0=1,可以看出和異或產生的效果類似。

②上面的加法雖然可以用異或來實現,但是還有1+1的進製問題,可以用另一種方式解決,比方說:1+1=0,可以通過1&1,為0,同時,將其左移一位即可獲取進製。

③接著就是將①和②的結果加起來即可。

public

intaplusb(int a, int b)

設計乙個演算法,計算出n階乘中尾部零的個數

我的思路是(不對):①先算出n階乘,接著對某個數計算尾部0的個數。

public

long

trailingzeros(long n)

}catch (exception e)

return count;

}public

long

factorial(long n)

return n * factorial( n -1 ) ;

}

存在的問題:比較小的資料還能正常執行,一旦資料大的話,求階乘就會出問題。

其實這個題目真正做法不應該是這樣,核心在於什麼樣的數相乘會產生尾部為0,重點在5,只要是個偶數乘以5都可以產生尾部為0的數,而且如果產生了第乙個0,後面不管乘以什麼數這個0都不會消失,後續只會疊加,所以說只要遍歷n、n/5….即可。

public

long

trailingzeros(long n)

return num ;

}

尾部的零 設計乙個演算法,計算出n階乘中尾部零的個數

思路 乙個n的階乘未尾有多少個 0 取決於 1 到 n 的各個因子中 2 和 5 的個數,而2的個數是遠遠多於5的個數的,因此求出5的個數即可。題解中給出的求解因子 5 的個數的方法是用 n 不斷除以 5,直到結果為 0,然後把中間得到的結果累加.例如,100 5 20,20 5 4,4 5 0 則...

每日演算法之5

二分查詢 針對於有序序列 int b search int a,int length,int e return 1 遞迴改編 int b search int a,int low,int high,int e else return 1 測試用例 int main int e 6 coutthrow...

每日演算法之七 Reverse Integer

reverse digits of an integer.example1 x 123,return 321 example2 x 123,return 321 反轉整形數字,使用取餘取整迴圈即可,但是實際要考察的應該是對可能輸入的考慮是否全面 1 是否為零 2 如果是1200,翻轉後是0021還是...