木人白住 2021-04-20 09:53 采纳率: 100%
浏览 60
已采纳

Java为什么BigInteger的数据存到数组里翻倍了

今天我做到一题:

(被5或6整除)找出能被5或6整除的前10个数字(大于Long.MAX_VALUE)

正确的答案是这样的

import java.math.BigInteger;

public class Exercise10_21 {
    public static void main(String[] args) {
        BigInteger m = BigInteger.valueOf(Long.MAX_VALUE);
        int j = 0;
        for(int i = 1; j<10 ; i++) {
            BigInteger x = m.add(BigInteger.valueOf(i));
            if((x.mod(BigInteger.valueOf(5)).equals(BigInteger.valueOf(0)) || x.mod(BigInteger.valueOf(6)).equals(BigInteger.valueOf(0)))) {
                System.out.println(x);
                j++;
            }
        }
    }
}
9223372036854775810
9223372036854775812
9223372036854775815
9223372036854775818
9223372036854775820
9223372036854775824
9223372036854775825
9223372036854775830
9223372036854775835
9223372036854775836

但是一旦我先存入数组在输出答案

import java.math.BigInteger;

public class Exercise10_21 {
    public static void main(String[] args) {
        BigInteger m = BigInteger.valueOf(Long.MAX_VALUE);
        BigInteger a[]= new BigInteger[10];
        int j = 0;
        for(int i = 1; j<10 ; i++) {
            BigInteger x = m.add(BigInteger.valueOf(i));
            if((x.mod(BigInteger.valueOf(5)).equals(BigInteger.valueOf(0)) || x.mod(BigInteger.valueOf(6)).equals(BigInteger.valueOf(0)))) {
                a[j] = m.add(x);
                System.out.println(a[j]);
                j++;
            }
        }
    }
}
18446744073709551617
18446744073709551619
18446744073709551622
18446744073709551625
18446744073709551627
18446744073709551631
18446744073709551632
18446744073709551637
18446744073709551642
18446744073709551643

输出的结果就翻倍了,请问这是为什么,以及解决办法。

  • 写回答

4条回答 默认 最新

  • 张小帅和刘美美 2021-04-20 10:01
    关注

    你自己代码的问题 add两次

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 关注

    在 Java 中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的局限性。

    我们都知道 Integer 是 Int 的包装类,int 的最大值为 2^31-1。若希望描述更大的整数数据时,使用Integer 数据类型就无法实现了,所以Java中提供了BigInteger 类。

    BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息。

    评论
  • 有问必答小助手 2021-04-20 14:54
    关注

    您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    评论
  • 有问必答小助手 2021-04-21 18:18
    关注

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求日版华为b610s-77a 官方公版固件,有偿
  • ¥15 关于#java#的问题,请各位专家解答!(相关搜索:java程序)
  • ¥15 连接所有楼的最短路径长度
  • ¥15 linux tsi721的驱动编译后 insmod 提示 报错
  • ¥20 multisim测数据
  • ¥15 求无向连通网的所有不同构的最小生成树
  • ¥15 模拟器的framebuffer问题
  • ¥15 opencv检测轮廓问题
  • ¥15 单点式登录SSO怎么爬虫获取动态SSO_AUTH_ACCESS_Token
  • ¥30 哈夫曼编码译码器打印树形项目