定义函数divide使其的功能为:将给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 '*'、除号 '/' 以及求余符号 '%' 。结果去除小数部分。
代码如下:
int divide(int a, int b){
//将除法转换成加法,用atri记录计算次数,用flage来标记最终结果的符号
long atri=0,flage=-1;
//将a,b分别转换为正数并得出计算结果的符号
if(a<0){
a=-(unsigned)a;
flage++;
}
if(b<0){
b=-(unsigned)b;
flage++;
}
//开始计算
if(a>b){
while(a>0){
a -= b;
atri++;
}
//输出计算结果
if(flage==0) return -(atri-1);
else return (atri-1);
}else if(a==b){ //将相同数的计算结果单独输出
if(flage==0) return -1;
else return 1;
}else{ //a绝对值相对更小时直接输出0
return 0;
}
}
运算结果出现错误的例子为:
可参考
int divide(int dividend, int divisor){
int result = 0;
int flag,t,d,i;
if(dividend == 0){
return 0;
}else if(dividend == INT_MIN && divisor == -1){
return INT_MAX;
}else if(dividend == INT_MIN && divisor == 1){
return INT_MIN;
}else if(dividend == INT_MIN && divisor == INT_MAX){
return -1;
}else if(dividend == divisor){
return 1;
}else if(divisor == INT_MIN){
return 0;
}
flag = (dividend^divisor)<0;
if(dividend == INT_MIN){
dividend += abs(divisor);
result++;
}
t = abs(dividend),d = abs(divisor);
for(i=31;i>-1;i--){
if((t>>i) >= d){
result += 1<<i;
t -= d<<i;
}
}
if(result == INT_MIN){
return INT_MIN;
}else{
return flag ?-result:result;
}
return 0;
}
int main(void)
{
int n,m;
while(1)
{
printf("input:");
scanf("%d %d",&n,&m);
printf("%d\n",divide(n,m));
}
return 0;
}