精华内容
下载资源
问答
  • LeetCode29题 两数相除

    2019-04-21 13:04:58
    两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。 思路:从除法的定义说,被除数除以除数等于商+余数。a/b=c。将c可以用二进制表示: 所以可以从大到小位移,如果a...

    题目描述:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。
    思路:从除法的定义说,被除数除以除数等于商+余数。a/b=c。将c可以用二进制表示:
    在这里插入图片描述
    所以可以从大到小位移,如果a>>i>b,说明,已经找到最大的为1的位。此时a=a-b*2^i1。此时,res+=2的i1次方。直到找到最后一位为止。

    class Solution {
        public int divide(int dividend, int divisor) {
         //先处理特殊情况
            if(divisor==-1&&dividend==Integer.MIN_VALUE) return Integer.MAX_VALUE;
            if(divisor==0) return 0;
            //再处理正负号问题
            boolean flag=(dividend^divisor)<0;
            //都变为正数,消除位移时正负号的影响
            long first=Math.abs((long)dividend);
            long second=Math.abs((long)divisor);
            //定义一个结果
            int res=0;
            //开始进行位运算
            for (int i = 31; i >= 0; i--) {
                if((first>>i)>=second){
                    res+=1<<i;
                    first-=(second<<i);
                }
            }
            return flag?-res:res;
        }
    }
    

    测试结果如下:
    在这里插入图片描述
    注意点:在取绝对值前,需要先转换类型;

    展开全文
  • 不使用乘号,除号和取模符号将两数相除。如果溢出返回 MAX_INT。详见:https://leetcode.com/problems/divide-two-integers/description/ Java实现: 位操作Bit Operation,思路是:如果被除数大于或等于除数,则...

    不使用乘号,除号和取模符号将两数相除。
    如果溢出返回 MAX_INT。
    详见:https://leetcode.com/problems/divide-two-integers/description/

    Java实现:

    位操作Bit Operation,思路是:如果被除数大于或等于除数,则进行如下循环,定义变量t等于除数,定义计数p,当t的两倍小于等于被除数时,进行如下循环,t扩大一倍,p扩大一倍,然后更新res和m。

    class Solution {
        public int divide(int dividend, int divisor) {
            int res=0;
            if(divisor==0){
                return Integer.MAX_VALUE;
            }
            if(dividend==Integer.MIN_VALUE&&divisor==-1){
                return Integer.MAX_VALUE;
            }
            long m=Math.abs((long)dividend);
            long n=Math.abs((long)divisor);
            while(m>=n){
                long t=n,p=1;
                while(m>=(t<<1)){
                    t<<=1;
                    p<<=1;
                }
                res+=p;
                m-=t;
            }
            if((dividend>0 && divisor>0)||(dividend<0 && divisor<0)){
                return res;
            }else{
                return -res;
            }
        }
    }
    

    参考:https://www.cnblogs.com/grandyang/p/4431949.html

    转载于:https://www.cnblogs.com/xidian2014/p/8687570.html

    展开全文
  • 1.定义一个MulException类...2.定义一个DivException类继承RuntimeException类,要求两数相除等于2报错, 在主类中定义一个方法,在方法中抛出此异常,在主方法观察结果。 class MulException extends Exception...

    1.定义一个MulException类继承Exception类,要求两数相乘等于100报错,在主类中定义一个方法, 在方法中抛出此异常,在主方法观察结果。

    2.定义一个DivException类继承RuntimeException类,要求两数相除等于2报错, 在主类中定义一个方法,在方法中抛出此异常,在主方法观察结果。

    
    
    class MulException extends  Exception{
        public MulException(String msg){
            super(msg);
        }
    }
    
    class DivException extends  RuntimeException{
        public DivException(String msg){
            super(msg);
        }
    }
    
    public class Test{
        public static void main(String[] args) throws Exception {
            MulTest();
            DivTest();
        }
        public static void MulTest() {
            try {
                int x = 10;
                int y = 10;
                if (x * y == 100) {
                    throw new MulException("两数相乘不等于100");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public static void DivTest() {
            try {
                int x = 4;
                int y = 2;
                if (x / y == 2) {
                    throw new DivException("两数相除不等于2");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    

    运行结果:
    在这里插入图片描述

    展开全文
  • 编写应用程序EcmDef.java,接收命令行的两个参数,要求不能输入...(1)在主类(EcmDef)中定义异常方法(ecm)完成两数相除功能。 (2)在main()方法中使用异常处理语句进行异常处理。 (3)在程序中,自定义对应输入负数的异

    编写应用程序EcmDef.java,接收命令行的两个参数,要求不能输入负数,计算两数相除。
    对数据类型不一致(NumberFormatException)、缺少命令行参数(ArrayIndexOutOfBoundsException、
    除0(ArithmeticException)及输入负数(EcDef 自定义的异常)进行异常处理。
    提示:
    (1)在主类(EcmDef)中定义异常方法(ecm)完成两数相除功能。
    (2)在main()方法中使用异常处理语句进行异常处理。
    (3)在程序中,自定义对应输入负数的异常类(EcDef)。
    (4)运行时接受参数 java EcmDef 20 10 //args[0]=“20” args[1]=“10”
    (5)Interger类的static方法parseInt(String s)将s转换成对应的int值。
    如:int a=Interger.parseInt(“314”); //a=314;

    package com.atguigu.exer;
    
    public class EcmDef {
    	public static void main(String[] args) {
    		try{
    			int i = Integer.parseInt(args[0]);
    			int j = Integer.parseInt(args[1]);
    			
    			int result = ecm(i,j);
    			
    			System.out.println(result);
    		}catch(NumberFormatException e){
    			System.out.println("数据类型不一致");
    		}catch(ArrayIndexOutOfBoundsException e){
    			System.out.println("缺少命令行参数");
    		}catch(ArithmeticException e){
    			System.out.println("除0");
    		}catch(EcDef e){
    			System.out.println(e.getMessage());
    		}
    		
    	}
    	
    	public static int ecm(int i,int j) throws EcDef{
    		if(i < 0 || j < 0){
    			throw new EcDef("分子或分母为负数了!");
    		}
    		return i / j;
    	}
    }
    
    package com.atguigu.exer;
    
    //自定义异常类
    public class EcDef extends Exception {
    
    	static final long serialVersionUID = -33875164229948L;
    
    	public EcDef() {
    	}
    
    	public EcDef(String msg) {
    		super(msg);
    	}
    }
    
    展开全文
  • 1.这道题最大的难点就是超时的问题。如果while循环内每一次只加一次(sum=sum+divisor),那么会超时,所以参考...3.虽然题目中要求说是只能存32位整数,但是在运算的过程中可以定义long型的变量。 class Solutio...
  • 不使用乘除法来计算数相除,那就从除法的定义出发:商表示的是被除数里包含了多少个除数。那最直接的一种办法,就是循环减除数,累加次数,直到不能再减。这么粗暴的办法,很容易会超时,举个极端的例子,若被除...
  • /*⾃定义受检异常类 OddException,表示数相除时, 除数为奇数时出现的异常。 该类必须定义两个构造⽅法: 默认构造⽅法和 带字符串参数的构造⽅法。 编写MathDivide类,实现成员⽅法divide(double b,double c)...
  • 一、根据身高重建队列题目:有一群人站队,每人通过一对...输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]代码:# -*- coding: utf-8 -*-# 定义身高队列statu...
  • 的最大公约数 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(){ int a, b, c; printf("请输入个整数:\n"); scanf("%d %d", &a, &b); c = a%b; while(c!= 0){...
  • 辗转相除法求两数的最大公约数(递归实现) 最大公约数定义:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这...
  • def fun(a,b): //定义一个函数fun,参数为输入的 c=a/b d=a%b d=float('%.1f' % d) //将整数d转换为float类型并保留一位小数,更改数字1可改变保留小数位 return (c,d) //输入 a=input() a=int(a)...
  • 根据欧几里德辗转相除法,求个已定义好的字M、N(均为正整数)的最大公约数,步骤为: ①求M/N的余数R; ②如果R=0,则N为最大公约数,退出循环; ③用N更新M的值,用R更新N的值; ④重复①~③步。 将M、N和最大...
  • 最大公约数定义:把能够整除某一个,叫做这个的约数。几个所公有的约数叫这几个的公约数。公约数中最大的一个叫做这几个的最大公约数。例如:27和15,,27 的约数有1,27,3,9;15的约数为:1,15,3,5。...
  •  任给个整数a,b,其中b≠0,如果存在一个整数q使得等式 a = bq  成立,我们就说是b整除a,记做b|a. 性质1:如果c|a,c|b,且对于任意的整数m,n,则有c|ma + nb 证明: 利用上述定义进行证明 ...
  • 定义: 指个或多个整数共有约数中最大的一个。 a,b的最大公约数 记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。 求最大公约数有多种方法,常见的有质因数...
  • 辗转相除法的定义:对于个正整数a和b,其中a&gt;b,r为a除以b的余数,gcd(a,b) = gcd(b,r); 原理:设a,b的最大公约数为u,a = u · t1; b = u · t2; (t1 , t2 为某个,满足等式要求,是多少并不重要,...
  • 辗转相除

    2016-10-06 15:16:00
    定义一个函数F(a,b),表示对于对(a,b)调用辗转相除法的步为多少。 已知F(a,b)=k,求(a,b)使得a+b尽量小,答案模109+7。 【输入描述】 输入一个整数,表示k。 【输出描述】 输出个整数,表示a、b(a <...
  • 辗转相除

    2021-03-07 14:12:08
    欧几里得算法又称辗转相除法,是指用于计算个非负整数a,b的最大公约数。应用领域有数学和计算机个方面。计算公式gcd(a,b) = gcd(b,a mod b) ——百度定义 原理 例如求18与12的最大公约数,将一个作为被除,...
  • 输入个整数,求它们相除的余数。用带参的宏来表示 主要内容为使用宏进行编码,开头进行宏的定义相除),代码中直接...输入:\n"); scanf("%d%d",&amp;a,&amp;b);//输入 prin...
  • 1).定义一个MulException类...定义一个DivException类继承RuntimeException类,要求两数相除等于2报错,在主类中定义一个方法,在方法中抛出此异常,在主方法观察结果。 class MulException extends Exception { ...
  • 题目描述: ... 定义一个DivException类继承RuntimeException类,要求两数相除等于2报错,在主类中定义一个方法,在方法中抛出此异常,在主方法观察结果 代码如下: package www.Dyson.java; //继承受...
  • 辗转相除法 递归 function gys(a,b){ if(b==0){ return a; } let num = a%b; return gys(b,num); } document.write(gys(12,24)). //12 迭代 function gys(a,b){ let num; while(b!=0){ num = a%b; ...
  • 解释辗转相除法:它的定义是:用较小数除较大数,...这里有个基本原理:个数的最大公因数等于这数相除的余数中更 小的数的最大公因数。 这里可以把A看做x倍的K即x*K,B看做y倍的K即y*K;这里假设A>B,A%B=n...
  • //**求的最大公约数(相减法) // 汪强 // 2017年3月19日#include using namespace std; int math(int a,int b)//math函数用来求最大公约数 { int c; //定义临时变量 while(a!=0) //外层循环当a不等
  • 计算个双精度浮点数a和b的相除的余数,a和b都是双精度浮点数。这里余数(r)的定义是:a=k×b+r,其中k是整数,0≤r<b。 【输入】 输入仅一行,包括个双精度浮点数a和b。 【输出】 输出也仅一行,a÷b的余数...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 261
精华内容 104
关键字:

两数相除定义