java需要一个更大的整数基元类型
我有一个java程序,可以将大量的数字相乘。输出是long
,但太小,输出为0。我不认为有更大的原始类型
我可以使用BigInteger
类,但是我必须使用它的multiply()
和divide()
方法,而不是常规的*
和/
,这将非常不方便
下面是一行代码:
System.out.printf("c) In how many of the arrangements in part (a) are all the vowels adjacent?%n " + "(7! / (2!2!))(6! / 3!2!) = " + (new Factorial(7).r / new Power(new Factorial(2).r,2).r) * (new Factorial(6).r / (new Factorial(6).r * new Factorial(2).r)) + "%n");
它正在使用我的Factorial
和Power
类,而且太大了
是否有一个更长的数字类仍然可以使用*
和/
?还是有其他更容易使用的数字类
谢谢
# 1 楼答案
基本类型(byte、short、int、long)是处理器体系结构定义的其他语言(比如C、C++)中的经典类型。因此,根据您的CPU类型,long可能是16位、32位或64位
现在,Java改变了这一点,并将这种类型固定到一定长度,而不考虑处理器架构See more info here
如果你需要处理更大的数字,你只剩下
BigInteger
、BigDecimal
和类似的数字。请注意:这些类型不使用CPU指令,而是“手动”进行数学运算,这意味着它们的速度相当慢(想想1000倍)另一方面,您所说的将
*
和/
与这些类型一起使用被称为operator overloading。一些编程语言支持它,但在Java中这是一个很大的禁忌。有一些预编译器(参见JFront),但最后我听说它不适用于BigInteger
您可以用Groovy或Scala编写程序,这两种语言都在JVM上运行(Groovy的语法与Java非常相似,主要是将.Java重命名为.Groovy works),并且都支持
BigInteger
的运算符重载