目錄
一、題型1:不使用中間量交換兩個值
二、劍指offer47.求1+2+...n
三、劍指offer48.不使用加減乘除做加法
//第一種方法,數**算
若a=1,b=2;
a = a + b; =3
b = a - b; =1
a = a - b; =2
//第二種方法,位異或運算
若a=1=01b, b=2=10b;
a = a^b;=01^10=11
b = a^b; =11^10=01
a = a^b; =11^01=10
1.題目描述:
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)。
2.解題分析
解題思路:
1.需利用邏輯與的短路特性實現遞迴終止。
2
.當n==
0
時,(n>
0
)&&((sum+=sum_solution(n-
1
))>
0
)只執行前面的判斷,為
false
,然後直接返回
0;
3.當n>
0
時,執行sum+=sum_solution(n-
1),實現遞迴計算sum_solution(n)。
public class solution
}
1.題目描述
寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。
2.分析
/**
* @param num1
* @param num2
* @return
* 分三步計算
* 1.計算不帶進製的加法:0+0=0,0+1=1,1+1=0,1+0=1,即運算中的:亦或
* 2.計算進製:0+0=0,0+1=0,1+0=0,1+1=1,只有1+1才會產生進製,即運算中的:與(再向左位移一位)
* 3.二者相加,相加繼續使用步驟1的亦或,知道不會產生進製
* */
public class sword48_add_use_bit
system.out.println(sum);
return sum;
}public static void main(string args)
}
演算法 位運算
public static intpowern int m,int n return m public static void main string args public static boolean ispower int n return false num如何使2的n次冪,那麼num nu...
演算法 Bit Operation(位運算)
今天做到關於位運算的演算法題的時候發現自己好像是一點也不是很了解。於是就開始找了有關位運算的題目開始補。第一題 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示 首先要了解以下的基本的位操作符 符號含義描述 運算規則 與 兩個位都為1時,結果才為1i或 兩個位都為0時,結果才為0 異...
位運算相關演算法
思想 使用異或,遍歷陣列,兩兩異或,即是最終的答案 給定乙個包含 0,1,2,n 中 n 個數的序列,找出 0 n 中沒有出現在序列中的那個數。思想 採用異或 思想1 將每個數字看成32個bit位,對每一位,遍歷整個陣列,統計陣列中該位為1的個數,當個數 3不為0時,該位為有效位 最終32位中的有效...