Java中的无限整数
我认为我的方法不对。我应该创建一个类,允许用户输入任何数字,不管它有多大(当然,由于内存的限制,它不是无限的)。我有一些代码,但我很确定质量是垃圾。我似乎在使用字符串时遇到了最大的麻烦,并且一直在避免使用它。我将只发布我所做的工作。我只是需要帮忙清理一下,因为我觉得我走的方向不对。以下是我的代码到目前为止的内容。我道歉。我不是一个经验丰富的程序员Java中的无限整数,java,Java,我认为我的方法不对。我应该创建一个类,允许用户输入任何数字,不管它有多大(当然,由于内存的限制,它不是无限的)。我有一些代码,但我很确定质量是垃圾。我似乎在使用字符串时遇到了最大的麻烦,并且一直在避免使用它。我将只发布我所做的工作。我只是需要帮忙清理一下,因为我觉得我走的方向不对。以下是我的代码到目前为止的内容。我道歉。我不是一个经验丰富的程序员 public class InfiniteInteger implements Comparable<InfiniteInteger> {
public class InfiniteInteger implements Comparable<InfiniteInteger> {
// TO DO: Instance Variables
public final int BigNumbers;
public final String Infinite;
public final int []integerArray;
public InfiniteInteger(String s) {
// TO DO: Constructor
Infinite=s;
}
public InfiniteInteger(int anInteger) {
// TO DO: Constructor
BigNumbers=anInteger;
integerArray= new int[anInteger];
}
public int getNumberOfDigits() {
// TO DO: return an integer representing the number of digits
of this infinite integer. //
int NumberOfDigits=0;
for(int i=0; NumberOfDigits<0;i++){
}
return BigNumbers;
}
/**
* Checks whether this infinite integer is a negative number.
* @return true if this infinite integer is a negative number.
* Otherwise, return false.
*/
public boolean isNegative() {
// TO DO
if(isNegative()) {
return true;
} else return false;
}
公共类InfiniteInteger实现可比较{
//要做的事情:实例变量
公共最终整数;
公共最终字符串无限;
公共最终整数[]整数数组;
公共无限整数(字符串s){
//要做的事情:构造函数
无限=s;
}
公共无限积分(整数){
//要做的事情:构造函数
大数=整数;
整数数组=新整数[整数];
}
public int getNumberOfDigits(){
//要执行的操作:返回一个表示位数的整数
这个无穷大的整数//
int NumberOfDigits=0;
对于(int i=0;NumberOfDigits,您可以使用biginger
来实现此目的。它使用长度可变的位数组
对biginger
的操作速度较慢,但无论数字是多少(只要它是整数),都可以工作。此外,biginger
操作得到优化(例如使用特殊的CPU指令)
在旁注中,如果人们指的是任何数字,他们有时指的是任何合理的数字。在这种情况下,long
的范围在很多情况下都是足够的。你可以使用biginger
来实现这一点。它使用长度可变的位数组
对biginger
的操作速度较慢,但无论数字是多少(只要它是整数),都可以工作。此外,biginger
操作得到优化(例如使用特殊的CPU指令)
在旁注中,如果人们指的是任何数字,他们有时指的是任何合理的数字。在这种情况下,long
的范围在很多情况下是足够的。使用Java内置类,来自JavadocBigInteger
用于
不可变的任意精度整数
使用Java内置类,来自Javadocbiginger
的
不可变的任意精度整数
您试图完成的工作已经在BigInteger类中完成。在创建更简单的版本时,检查它的源代码可能会很有用:
您试图完成的工作已经在BigInteger类中完成。在创建一个更简单的版本时,检查它的源代码可能会有用:
已经有一个类型可以满足您的需要。请改用biginger
。您的是负的
方法将永远无法工作,因为您在自己的方法中调用该方法时没有stopcondition…导致无限递归re,“受内存限制,它实际上不是无限的”:使用高端PC,您应该能够处理比一个人一生中在计算机中输入的数字更大的数字。已经有一种类型可以满足您的需要。请改用biginger
。您的为负
方法将永远无法工作,因为您在自己的方法中调用该方法时没有停止条件…结果是n infinite recursionRe,“受内存限制,它不是真正的无限”:对于高端PC,你应该能够处理比一个人一生中在计算机中输入的数字更大的数字。这并不能回答问题。问题的答案是“不,你永远不会使用这样的字符串。”@MikkelLøkke在我听来很像。@MikkelLøkke我在OP的帖子中没有看到问号,所以从技术上讲没有问题^^^@ElliottFrisch从我所看到的内容来看,它不会将一个字符串转换成一个整数,其中包含一个可能大于Integer.MAXVALUE的数字。这就是我对“问题”的理解。如果您自制的biginger
使用了String
表示,但仍然局限于基本int
的限制,那么一旦您需要它来进行任何类型的算术,使用String
表示临时值是毫无意义和冗余的。@MikkelLøkke是的,但如果您使用Oracle的biginger
你可以用一个字符串来构造它。我想这就是OP试图做的。这并不能回答问题。问题的答案是“不,你永远不会使用这样的字符串。”@MikkelLøkke在我听来很像。@MikkelLøkke我在OP的帖子中没有看到问号,所以从技术上讲没有问题^^^@ElliottFrisch从我所看到的内容来看,它不会将一个字符串转换成一个整数,其中包含一个可能大于Integer.MAXVALUE的数字。这就是我对“问题”的理解。如果您自制的biginger
使用了String
表示,但仍然局限于基本int
的限制,那么一旦您需要它来进行任何类型的算术,使用String
表示临时值是毫无意义和冗余的。@MikkelLøkke是的,但如果您使用Oracle的biginger
你可以用一个字符串来构造它OP试图做什么。我不允许导入java.math。除非我不必导入?是的。我们可以使用数组,但不允许导入列表、包或任何数据结构。我不允许导入java.math。除非我不必导入?是的。我们可以使用数组,但不允许导入列表、包或任何数据结构。是的,如果允许我为我导入java.math,这将非常有用但我不能。除非我不需要?…导入任何要使用BigInteger的东西?是的,如果允许我为它导入java.math,这将非常有用,但我不能。除非我不需要