[英]proper way to store large numbers in a variable
我想玩数字,但是基本上,我一直在编写斐波那契序列的算法和寻找素数的强力路径!
我不是程序员,只是一个数学家。
然而,我经常遇到的一个问题是长长的,双重的和漂浮物常常会耗尽空间。
如果我想继续在JAVA中工作,我可以以什么方式创建自己的数据类型,以便我不会用完房间。
从概念上讲,我想把3个双打放在一起,
public class run {
static double a = 0;
static double b = 0;
//static double c = 0;
static void bignumber(boolean x) {
if (x == true && a < 999999999) {
++a;
} else if (x == true && a == 999999999) {
++b;
a = 0;
}
System.out.print(b + "." + a + " \n");
}
public static void main(String[] args) {
while(true) {
bignumber(true);
}
}
}
有一个更好的方法吗,
我想有一天能够说出来
mydataType X = 18476997032117414743068356202001644030185493386634 10171471785774910651696711161249859337684305435744 58561606154457179405222971773252466096064694607124 96237204420222697567566873784275623895087646784409 33285157496578843415088475528298186726451339863364 93190808467199043187438128336350279547028265329780 29349161558118810498449083195450098483937752272570 52578591944993870073695755688436933812779613089230 39256969525326162082367649031603655137144791393234 7169566988069
或本网站上的任何其他号码
我也试过了
package main;
import java.math.BigInteger;
public class run {
BigDecimal a = 184769970321174147430683562020019566988069;
public static void main(String[] args) {
}
}
但它似乎仍然超出了范围
为此目的使用BigDecimal
(而不是double
)和BigInteger
(而不是int
, long
),但是你只能通过他们的方法使用它们。 没有运营商,可以使用。
像这样使用:
BigInteger big = new BigInteger("4019832895734985478385764387592") // Strings...
big.add(new BigInteger("452872468924972568924762458767527");
与BigDecimal
相同
BigDecimal是java中使用的类,您需要表示非常大或非常小的数字,并保持精度。 缺点是它不是原始的,所以你不能使用普通的数学运算符(+ / - / * / etc),并且它可能是一个小的处理器/内存密集型。
你可以存储这样的大数字:
并为他们实施数学。 这不是很复杂。 作为提示,为了使一切变得更简单,您可以按相反的顺序存储数字。 这将使您的数学实现更简单 - 您总是使用nr [k]添加nr [k]并为任何长度数字提供传输空间,只需记住用较短的数字填充0。
在Knuth Seminumeric Algorithms一书中,您可以找到适合所有操作的非常好的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.