Java 数据长度超过了“a”的长度;“长”;
问题:第一天,A给B的钱是1美元,每天都是双倍。B个人100天后能拿到多少钱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 +
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);