1. 程式人生 > >給定A, B兩個整數,不使用除法和取模運算,求A/B的商和餘數

給定A, B兩個整數,不使用除法和取模運算,求A/B的商和餘數

第一種辦法:

從小到大遍歷

	for(i = 2 to A - 1)
		if(i * B > A)
			商 = i- 1, 餘 = A - (i  -1) * B

第二種辦法

二分法,在[2, A]中查詢滿足的解

第三種辦法

以除數為初始測試值,以2的指數為步長來搜尋問題空間,當被除數與測試值的差小於除數時便結束搜尋,若在這之前測試值大於被除數,則將被除數減去前一個測試值,並重覆上述過程直到搜尋結束。舉個例子,求1200/3:

順序搜尋時,我們要與1200比較的數有:3,6,9,12,15,…,1998,2001,比較次數667次

以2的指數為步長搜尋時,與1200比較3,6,12,24,48,96,192,384,768,1536,然後與1200-768=432再進行比較3,6,12,24,48,96,192,384,768,再取432-384=48比較3,6,12,24,48,搜尋結束,比較次數共24次,比順序搜尋有很大的提高。你可能會問,為什麼要以2的指數為步長來搜尋呢?答案是,這樣我們就可以使用位操作來進一步提高計算效率了。