【问题标题】:Multiplication of 2 6-digits numbers in java [duplicate]java中2个6位数字的乘法[重复]
【发布时间】:2019-12-12 04:36:43
【问题描述】:

为什么下面代码的输出是 1345094336 而不是 39999800000?我应该如何编辑它?我相信这与整数溢出有关。

public class testC {
    public static void main(String[] args) {
        long product = 199999 * 200000;
        System.out.println(product);
    }
}

【问题讨论】:

  • 尝试long product = 199999 * 200000L; 否则它正在使用 int 值相乘

标签: java


【解决方案1】:

两个整数199999 * 200000的乘积是39999800000,大于整数

storage capacity.
          width                     minimum                         maximum

SIGNED
byte:     8 bit                        -128                            +127
short:   16 bit                     -32 768                         +32 767
int:     32 bit              -2 147 483 648                  +2 147 483 647
long:    64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807

UNSIGNED
char     16 bit                           0                         +65 535

因此,您需要在乘法端将至少一个数字转换为 long 要么

(long)199999 * 200000
199999 * (long)200000
199999 * 200000L
199999L * 200000

【讨论】:

  • 这个很彻底。
【解决方案2】:

被相乘的数字被假定为整数,因此溢出,将其设置为 long 无济于事。使用

long product = (long)199999 * (long)200000;

改为

【讨论】:

    【解决方案3】:

    你可以改变下面的行

    long product = 199999 * 200000;

    long product = 199999 * 200000L;

    由于两个整数的倍数是一个整数并且在这种情况下会溢出,因此您必须将其中一个设为 long。

    【讨论】:

    • 您必须将其中 一个 设为 long
    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多