二进制相关
258. 各位相加
給定一個非負整數?num,反復將各個位上的數字相加,直到結果為一位數。
10 1
11 2
12 3
13 4
14 5
15 6
17 8?
18 9 0
19 1
20 2
21 3
22 4
23 5
24 6
討論里面的dalao:
For base b (decimal case b = 10), the digit root of an integer is:
dr(n) = 0 if n == 0
dr(n) = (b-1) if n != 0 and n % (b-1) == 0
dr(n) = n mod (b-1) if n % (b-1) != 0
or
dr(n) = 1 + (n - 1) % 9
Note here, when n = 0, since (n - 1) % 9 = -1, the return value is zero (correct).
From the formula, we can find that the result of this problem is immanently periodic, with period (b-1).
so,一般化之后就是 1+(n-1)%(base-1) 對base進制的數n,把各個數位上的數字相加,最后得到一個一位數是多少?
給定一個整數,編寫一個函數來判斷它是否是 2 的冪次方。
判斷一個數 n 是否是 3的冪?
假設存在一個N>n ,若 N 是 3的冪,且 N%n=0 , 那么n肯定是3的冪,因為 N分解因子后除了 3沒有別的因子,若有的話也就不再是 3的冪了
若 把 3 換成一個非素數 k ,那么上面的結論就不成立了,因為這時候 N可以被分解為多個素因子(p1^a1*p2^a2*p3^a3...),n也可以被分解為多個素因子(b1^c1*b2^c2...)再有 N % n =0 那么有可能是 N的部分因子把n的整除 ,自然不能說明,n是k的冪,也不能說N是k的冪
?結論: 若 N>n, 存在一個素數k 使得 N=k^p(p=0,1,3...),且 N % n = 0 ,那么 n= k^p(p=0,1,2,3..)
?反之不成立,只是一個充分不必要條件?
? ?3^k = MAX;
? ?k=log3(MAX);
? ?k=log(MAX)/log(3);
? ?3^k % n == 0
給定一個整數 (32 位有符號整數),請編寫一個函數來判斷它是否是 4 的冪次方。?
class Solution { public:bool isPowerOfFour(int num) {if(num<=0) return false;return (num&(num-1))==0 && num&(0x55555555);} };編寫一個函數,輸入是一個無符號整數,返回其二進制表達式中數字位數為 ‘1’ 的個數
輸入:00000000000000000000000000001011
輸出:3
顛倒給定的 32 位無符號整數的二進制位。
輸入: 00000010100101000001111010011100
輸出: 00111001011110000010100101000000
解釋: 輸入的二進制串 00000010100101000001111010011100 表示無符號整數 43261596,
? ? ? 因此返回 964176192,其二進制表示形式為 00111001011110000010100101000000。
用位運算進行兩個數的交換(交換a,b):
a = a^b;
b = a^b; //b = a^b^b=a;
a = a^b;//a = a^b^a = a^a^b=b;
(異或滿足交換律和結合律)
?
總結
- 上一篇: Floyd判圈算法(Floyd's cy
- 下一篇: 设计一个简单的空间配置器