Java 数据长度超过了“a”的长度;“长”;

Java 数据长度超过了“a”的长度;“长”;,java,android,Java,Android,问题:第一天,A给B的钱是1美元,每天都是双倍。B个人100天后能拿到多少钱 import java.text.NumberFormat; long x = 1; int y = 1; for(int p = 1; p <= 100; p++){ String o = NumberFormat.getIntegerInstance().format(x); System.out.println("Day " + y + " gets " + o); x = x * 2; y = y +

问题:第一天,A给B的钱是1美元,每天都是双倍。B个人100天后能拿到多少钱

import java.text.NumberFormat;

long x = 1;
int y = 1;
for(int p = 1; p <= 100; p++){
String o = NumberFormat.getIntegerInstance().format(x);
System.out.println("Day " + y + " gets " + o);
x = x * 2;
y = y + 1:
}

您可以看到,在第64天,数字变为负数,在第64天之后,数字变为0


我怎样才能得到第100天的金额?“long”是我所知道的最大的数据类型。

您可能需要切换到使用Java的BigInteger类

以下是一些文档:

从本质上讲,BigInteger可以容纳比CPU上的寄存器所能容纳的数字更大的数字,这将比长寄存器更长

此外,您不需要跟踪y,因为它的值将始终与p的值相同

import java.math.BigInteger;
import java.text.NumberFormat;

public class MyClass 
{
  public static void main(String[] args)
  {
    BigInteger x = BigInteger.ONE;
    BigInteger two = BigInteger.valueOf(2L);
    NumberFormat nf = NumberFormat.getInstance();

    for(int p = 1; p <= 100; p++)
    {
      String o = nf.format(x);
      System.out.println("Day " + p + " gets " + o);
      x = x.multiply(two);
    }

  }
}
import java.math.biginger;
导入java.text.NumberFormat;
公共类MyClass
{
公共静态void main(字符串[]args)
{
BigInteger x=BigInteger.1;
BigInteger二=BigInteger.valueOf(2L);
NumberFormat nf=NumberFormat.getInstance();
对于(int p=1;p
我喜欢那样


你可以编辑代码以适应循环,而不必每天都打印出来。

为什么是
y
呢?我从OP的例子中就保留了y。我现在已经删除了它。左移只是一个效率指标吗?感觉它让答案变得不那么笼统,如果它是3的倍数呢?这部分是一个效率指标……我会交换它不过要乘,只是为了保持一般性。对不起,这应该是幽默,而不是讽刺。无论如何,谈到效率,最好使用
biginger.ONE
而不是
new biginger(“1”)
,以及
biginger.valueOf(2L)
而不是
new biginger(“2”)
,并且只在循环外执行
biginger.valueOf(2L)
一次。将常量用于值
-16
16
。当然以前也曾问过类似的问题。请参阅示例。
import java.math.BigInteger;
import java.text.NumberFormat;

public class MyClass 
{
  public static void main(String[] args)
  {
    BigInteger x = BigInteger.ONE;
    BigInteger two = BigInteger.valueOf(2L);
    NumberFormat nf = NumberFormat.getInstance();

    for(int p = 1; p <= 100; p++)
    {
      String o = nf.format(x);
      System.out.println("Day " + p + " gets " + o);
      x = x.multiply(two);
    }

  }
}
BigInteger day64 = new BigInteger(whatever the number);
BigIneger day65 = day64.add(day64);