昨天表哥考我一道算法題,說是在面試中遇到的:
如何不使用除法操作符來計算兩個正整數的除法操作
太長時間沒刷題腦回路跟不上,回來想了想其實很簡單,利用二進制的原理,不斷求除數的2的冪次方,從而快速逼近最大商
代碼很簡單,一看就明白了
#include<iostream>
using namespace std;
void divide(int n,int m)
{
int s=0;
while(n>=m){
int i=1;
while(m*i*2<=n){
i*=2;
}
s+=i;
n-=i*m;
}
cout<<s<<" "<<n<<endl; //輸出商和餘數
}
int main()
{
int n,m;
cin>>n>>m;
divide(n,m);
return 0;
}