除数



两个数字相除 不能用 除号等

/** 
 * @Title: temp.java 
 * @Package  
 * @Description: TODO
 * @author nutc
 * @date 2013-9-7 下午1:42:09 
 * @version V1.0 
 */
public class temp {
	
	public static void main(String asrgs[]){
		temp t = new temp();
		System.out.println(t.divide(-2147483648, 2));
	}
	
	
    public int divide(int dividend1, int divisor1) {
    	//考虑1)正负号 2)溢出--long处理  记得在math.abs里就要long 不然 int 里的MIN_VALUE会溢出的!
        if(divisor1 ==0) return -1;  //除数为0的时候应该怎么处理?
        if(divisor1 == 1) return dividend1;
        if(dividend1 == 0) return 0;
        
        boolean ifn = false;
        if(dividend1<0 && divisor1>0 || dividend1>0&&divisor1<0){
            ifn  = true;
            dividend1 = -dividend1;
        }
        long dividend = Math.abs((long)dividend1);  //最重要的环节!!最大的会造成溢出!! 因为正数比负数少一个啊啊啊啊 
        long divisor = Math .abs((long)divisor1);
        int i = 1,j=1;
        
        while(i*divisor>0 && i*divisor<dividend ){
            j = i;
            i+=i;
        }
//        System.out.println("i="+i+" "+i*divisor);
        int temp = j;
        while(i*divisor<0 || i*divisor<dividend){
//        	if(i*divisor>dividend) break;
        	if(i*divisor<0)
        		i -= temp;
        	temp >>=1;
        	i += temp;
        }
        
        while(j<=i){
            int mid = j+((i-j)>>1); //左右移动的优先级 低于 常见操作符!!
//            System.out.println(j+" "+mid+" "+i);
            if(mid*divisor==dividend|| mid*divisor<dividend && (mid+1)*divisor>dividend){
                if(!ifn)
                    return mid;
                else
                    return -mid;
            }
            else if(mid*divisor>dividend){
                i = mid-1;
            }else{
                j = mid+1;    
            }
        }
        return 0;
    }
}
 

别人写的比较值得参考

/*
 * Divide two integers without using multiplication, division and mod operator.
 */
public int divide(int dividend, int divisor) {
    if (divisor == 0) throw new IllegalArgumentException("divisor cannot be 0");
    if (dividend == 0) return 0;
    boolean neg = (dividend > 0 != divisor > 0);
    long dend = dividend;
    long dsor = divisor;
    dend = Math.abs(dend);
    dsor = Math.abs(dsor);
    if (dsor == 1)
        return neg ? new Long(-dend).intValue() : new Long(dend).intValue());
    if (dend == dsor)
        return neg ? -1 : 1;
    int quotient = 0;
    while (dend >= dsor){
        long tmp = dsor;
        int result = 1;
        while (dend >= (tmp + tmp)){
            tmp <= 1;
            result <= 1;
        }
        quotient += result;
        dend -= tmp;
    }
    return neg ? -quotient : quotient;
}

http://gist.github.com/bittib/5734695


<think>我们首先需要理解用户意图:查询与除数为0相关的知识。这包括数学概念、程序处理、以及相关错误等内容。 我们将进行网络搜索,整合信息,形成清晰回答,并生成相关问题。 搜索关键词:"除数为0 数学定义"、"除数为0 程序错误"、"除数为0 如何处理" 预期回答结构: 1. 数学上的定义(为什么除数不能为0) 2. 在编程中除数为0的错误表现(如异常类型) 3. 如何处理除数为0的情况(编程中的预防措施) 按照要求,回答需分点(方法或步骤)但不使用步骤词汇,每个点之间换行。 最后添加相关问题部分。 注意:避免第一人称,引用内容分散在回答中,公式和代码按照格式要求。 开始构建回答: 根据数学原理,除数为0是无意义的。因为除法是乘法的逆运算,任何数乘以0都得0,不可能得到非零的被除数。因此,0不能作为除数。 在编程中,除数为0会导致运行时错误。不同编程语言可能有不同的错误类型,例如在Java中会抛出`ArithmeticException`,在Python中会抛出`ZeroDivisionError`。 为了防止程序崩溃,应该在除法运算前检查除数是否为0,并采取相应的处理措施(如给出错误提示、使用默认值或跳过计算)。 代码示例(Python): 在除法运算前进行条件判断: ```python def safe_divide(dividend, divisor): if divisor == 0: # 处理除数为0的情况,例如返回None或0,也可以抛出自定义异常 return None else: return dividend / divisor ``` 数学公式表示除法的定义:若 $b \neq 0$,则 $a \div b = c$ 等价于 $b \times c = a$。当 $b=0$ 时,该等式无法成立(除非a也为0,但0/0也是未定义的)。 现在整合回答,按照要求分点,不使用步骤词汇,换行分隔。 注意:回答中不要集中引用,而是将引用的内容自然融入。 最后,生成三个相关问题。 </think>### 除数为0的相关知识 **数学定义与原理** 在数学运算中,除数不能为0。除法定义为乘法的逆运算:若 $a \div b = c$,则 $b \times c = a$。当 $b=0$ 时: - 若被除数 $a \neq 0$,则 $0 \times c = a$ 无解(因任何数乘0均为0)。 - 若被除数 $a = 0$,则 $0 \times c = 0$ 有无限解($c$ 可为任意值)。 因此,$a \div 0$ 的结果未定义(undefined)。极限角度分析,函数 $f(x)=\frac{1}{x}$ 在 $x=0$ 时趋向无穷大,但仍无确定值。 **编程中的处理** 程序执行除法运算时,除数为0会触发错误: - **Python** 抛出 `ZeroDivisionError` ```python try: result = 10 / 0 except ZeroDivisionError: print("除数不能为0") # 输出错误提示 ``` - **Java/C++** 抛出 `ArithmeticException` - **JavaScript** 返回 `Infinity`(如 `1/0`)或 `NaN`(如 `0/0`) **预防与调试方法** 输入验证:在除法前检查除数变量 ```python def safe_divide(a, b): if b == 0: return "Error: Divisor is zero" # 返回自定义错误 return a / b ``` 边界测试:对涉及除法计算的函数编写单元测试,覆盖除数为0的用例。 异常捕获:通过 `try-except` 结构处理潜在错误,避免程序崩溃。 **特殊场景探讨** - **浮点数运算**:极小值(如 $10^{-300}$)可能因精度限制被计算为0,需设置误差容忍阈值(epsilon)。 - **极限运算**:数学分析中 $\lim_{x \to 0} \frac{\sin x}{x} = 1$ 等极限存在,但直接代入 $x=0$ 仍无效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值