gpt4 book ai didi

java - 将两个大数字划分为字符串而不在 java 中使用 Bignumbers

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:58 24 4
gpt4 key购买 nike

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

  1. 添加
  2. 相乘
  3. 比较两个内部有大整数的字符串

现在我只需要实现 Dividing 方法,但我无法理解如何使用两个字符串而不是一个字符串和一个 Int 来实现它,这是我目前得到的,如果我们的数字是将字符串除以小到足以成为一个 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:如果这有助于除法,我的类(class)也可以将一个大数减去另一个数

最佳答案

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com