用移位实现除法操作,基本思想是:把除数向左移位来逼近被除数
#include "stdafx.h"
#include <iostream>
using namespace std;
bool g_inputvalid=true;
/*******************************
first:被除数
second:除数
quotient:商
remainder:余数
*******************************/
void Division(int first, int second, int "ient, int &remainder)
{
if(second==0) //判断除数是否为0
{
g_inputvalid=false;
return;
}
bool flag1,flag2;
flag1=true;
flag2=true;
if(first<0) //判断被除数和除数的符号,若为负数 则转化为正数 并且标志设为false
{
flag1=false;
first=0-first;
}
if(second<0)
{
flag2=false;
second=0-second;
}
quotient=0;
remainder=0;
int temp=second;
int shift=1;
while(first>=temp) //通过除数的移位操作来逼近被除数
{
temp<<=1;
if(temp<=first)
shift<<=1;
else
{
quotient+=shift;
temp>>=1;
first-=temp;
shift=1;
temp=second;
}
}
remainder=first;
if(flag1^flag2) //如果被除数和除数的符号相异 则商为负数
quotient=0-quotient;
if(!flag1) //如果除数或被除数有一个为负数,则余数应为负数
remainder=0-remainder;
}
int _tmain(int argc, _TCHAR* argv[])
{
int quotient,remainder;
Division(9,-2,quotient,remainder);
if(g_inputvalid)
cout<<quotient<<" "<<remainder<<endl;
else
cout<<"input error"<<endl;
return 0;
}