1

我想玩弄数字,无论多么初级,我一直在为斐波那契数列编写算法,并为寻找素数编写蛮力路径!

我不是程序员,只是一个数学人。

但是,我经常遇到的一个问题是 long long、double 和 floats 经常用完空间。

如果我想继续在 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) {

    }

}

但它似乎仍然超出范围

4

3 回答 3

3

为此目的使用BigDecimal(而不是double) 和BigInteger(而不是int, long),但您只能通过他们的方法使用它们。没有运算符,可以使用。

像这样使用:

BigInteger big = new BigInteger("4019832895734985478385764387592") // Strings...
big.add(new BigInteger("452872468924972568924762458767527");

BigDecimal

于 2012-12-12T06:04:18.913 回答
1

BigDecimal 是 java 中使用的类,您需要在其中表示非常大或非常小的数字,并保持精度。缺点是它不是原始的,所以你不能使用普通的数学运算符(+/-/*/etc),而且它可能会占用一点处理器/内存。

于 2012-12-12T06:09:17.700 回答
0

您可以像这样存储大量数字:

  • 长度
  • 数字[]

并为他们实现你的数学。这不是很复杂。作为提示,为了使一切更简单,您可以以相反的顺序存储数字。这将使您的数学更易于实现 - 您始终将 nr[k] 与 nr[k] 相加,并为任何长度的数字提供传输空间,只需记住将较短的数字填充为 0。

在 Knuth Seminumeric Algorithms 一书中,您可以找到所有操作的非常好的实现。

于 2012-12-12T06:10:35.463 回答