java - 将两个大数作为字符串相除,而不使用java中的Bignumbers

标签 java algorithm math division biginteger

我需要在不使用 Biginteger 的情况下划分两个大整数,因为数字不能存储在原始类型中,因为我需要从给定的字符串中逐个字符地执行此操作,我已经创建了一个名为 BigNumber 的类,通过这个类(class)我可以:

  1. 添加
  2. 比较两个包含大整数的字符串

现在我只需要实现除法方法,但我不知道如何用两个字符串而不是一个字符串和一个整数来实现它,这就是我到目前为止所得到的,如果我们是数字,它就可以工作将字符串除以小到足以成为 int

class BigNumber {
    String Number;
BigNumber div(BigNumber other) {
        String result= "";
        String num1= this.Number;
        long Divisor = Integer.parseInt(other.Number);
        int index = 0;
        long NumTemp = num1.charAt(index)-'0';
        while (NumTemp < Divisor){
            NumTemp = NumTemp * 10 +(num1.charAt(index+1) - '0');
            index++;
        }
        while (num1.length()-1 > index){
            result += (NumTemp/Divisor) ;
            NumTemp = (NumTemp % Divisor) * 10 + num1.charAt(index+1) - '0';
            index++;
        }
        result += (NumTemp/Divisor);
        System.out.println(result);
        System.out.println(NumTemp);
        BigNumber Big = new BigNumber(result);
        return Big;
    }
}
`

PS:我的类还可以将一个大数减去另一个大数,如果这有助于除法

最佳答案

我今天早上尝试了你们告诉我的方法并得到了它,谢谢大家,如果你们对此有一些改进请告诉我,因为这只是粗略的代码,没有消除效率低下的地方,谢谢大家

BigNumber div(BigNumber other) {
            String result = "";
            String num1 = this.Number;
            String num2 = other.Number;
            int Select = num2.length();
            String temp = num1.substring(0, Select);
            BigNumber tempNum = new BigNumber(temp);
            int NumbersLeft = num1.length() - temp.length();
            BigNumber MultObject = new BigNumber("1");
            if (tempNum.compareTo(other) < 0) {
                temp = num1.substring(0, Select+1);
                tempNum.Number = temp;
                NumbersLeft--;
                Select++;
            }
            do {
                MultObject.Number = "0";
                int Index = 0;
                while (other.mult(MultObject).compareTo(tempNum) < 0) {
                    Index++;
                    MultObject.Number = Integer.toString(Index);
                }
                Index--;
                MultObject.Number = Integer.toString(Index);
                String Carry = tempNum.sub(other.mult(MultObject)).Number;
                if (NumbersLeft > 0) {
                    Select++;
                    Carry += num1.charAt(Select - 1);
                    NumbersLeft--;
                }
                result += Index;
                tempNum.Number = Carry;
            }while (NumbersLeft > 0);
            MultObject.Number = "0";
            int Index = 0;
            while (other.mult(MultObject).compareTo(tempNum) < 0) {
                Index++;
                MultObject.Number = Integer.toString(Index);
            }
            Index--;
            MultObject.Number = Integer.toString(Index);
            String Carry = tempNum.sub(other.mult(MultObject)).Number;
            if (NumbersLeft > 0) {
                Select++;
                Carry += num1.charAt(Select - 1);
                NumbersLeft--;
            }
            result += Index;
            tempNum.Number = Carry;
                BigNumber Big = new BigNumber(result);
                return Big;
            }

关于java - 将两个大数作为字符串相除,而不使用java中的Bignumbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582606/

相关文章:

math - 为什么0除以0是错误?

c++ - 如何用矩形制作2点角并保持正确的厚度?

z3 求解器背后的算法

python - 使用巨大的列表优化循环

arrays - 数组的最大子组,以便它可以独立排序

math - 如何使用mathematica隐式求解单变量的微分方程?

java - Dockerized Spring Boot 应用程序中的 FileSystemNotFoundException

java - 说我正在覆盖 final方法,但我找不到 final方法

java - 使用 Java 8 DateTimeFormatter 和西类牙月份名称进行解析

java - 使用 Spring Tools Suite 打开 Eclipse 时出错