用移位实现除法操作

      用移位实现除法操作,基本思想是:把除数向左移位来逼近被除数
#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;
}


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值