如題所示
假設問題是a除以b:
題目要求是正整數,所以考慮的條件不是很多,如果要求是整數的話,即要考慮正負情況的判斷。
1、最簡單的就是依次用被除數a減去除數b,並統計減去的次數,即為相除結果;
這種方法效率不高,尤其是在被除數a很大,除數b很小的情況下,效率非常低;
2、考慮每次相減時,將b翻倍,這樣就可以提高很大的效率;
3、考慮位運算,因為位運算一般都比較高效;
4、採用遞迴的方法;
注意:**中沒有考慮b=0的判斷
#include using namespace std;
// ***** method
int mydiv_0(unsigned int a,unsigned int b)
return ans;
}// more effective
int mydiv_1(unsigned int a,unsigned int b)
a-=x;
ans+=y;
}return ans;
}// bit shift, more effective
int mydiv_2(unsigned int a,unsigned int b)
a-=x;
ans+=y;
}return ans;
}// recursive method
int mydiv_3(unsigned int a,unsigned int b)
return mydiv_3(a-x,b)+y;
}int main()
不用除法操作符如何實現兩個正整數的除法?
基礎知識 1 常用的等式 n n 1 n 1 2 獲取整數n的二進位制中最後乙個1 n n 或者n n 1 3 去掉整數n的二進位制中的最後乙個1 n n 1 方法一 根據除法運算的原理進行減法操作,對除法迴圈減被除數,減一次結果加一,直到剛好減為0或餘數小於被除數為止。方法二 遞迴法求解。如果每次...
不用任何操作符實現兩個正整數相加
首先,既然不能夠用操作符,那我們只能使用位操作來進行。對於位操作有 這5種操作。那問題是如何能夠用這3種操作來實現兩個資料的相加呢?在具體操作前,我們先來看看10進製數的相加過程,比如對於 283 969 這個加法操作,一般是從低位往高位進行操作,並且如果兩個數字加起來超過10了,則需要進1。那麼其...
程式設計實現兩個正整數的除法
程式設計實現兩個正整數的除法,當然不能用除法操作符。常規的想,100 7,可以試著7 1,7 2,7 3,7 14做,但這樣子太慢了。於是有人說以2的指數次遞增,也就是7 1,7 2,7 4,7 8,好了,因為7 16 100,所以這個時候就100 7 8 44接著下一次迴圈。int div con...