【问题标题】:Integer too long Java [duplicate]整数太长Java [重复]
【发布时间】:2013-05-09 12:57:55
【问题描述】:
  public static void gramstoAtoms()
  {
   System.out.println("Enter Amount of grams");
   Scanner keyboard = new Scanner(System.in);
   long x = keyboard.nextLong();
   System.out.println("Enter Unit Grams");
   long y = keyboard.nextLong();
   long result = x/y;
   long answer = result*60200000000000000000000;
   System.out.println(answer + "Atoms");
  }

如何更改此代码,以免出现整数太长错误?

【问题讨论】:

标签: java


【解决方案1】:

只需使用 BigInteger 而不是 long

BigInteger bi=new BigInteger("6020000000000000000000");

对于您的方法:

public static void gramstoAtoms()
  {
   System.out.println("Enter Amount of grams");
   Scanner keyboard = new Scanner(System.in);
   String x = keyboard.nextLine();
   System.out.println("Enter Unit Grams");
   String y = keyboard.nextLine();
   BigInteger result = new BigInteger(x).divide(new BigInteger(y));
   BigInteger answer = result.multiply(new BigInteger("60200000000000000000000"));
   System.out.println(answer + "Atoms");
  }

如果你的 xy 很小,你可以用简单的 long 来使用它们,但是当乘以 602.......0000 时,使用 BigInteger

【讨论】:

  • 我需要为课程导入什么,因为它给了我这个:
  • 导入 java.math.BigInteger;
  • 它编译,但它不会乘以结果
  • 我的输出:输入克数 5 输入单位克数 2 120400000000000000000000Atoms
  • 试试 gram = 45 和单位 gram = 23
【解决方案2】:

如果我没记错的话,阿伏伽德罗的电话号码是6.02e24long 的最大值为 9,223,372,036,854,775,807,这还不够大。你需要BigInteger

【讨论】:

  • 如何将 BigInteger 放入代码中,它给我一个编译错误。
【解决方案3】:

这是一个没有BigInteger的解决方案:

long answer = result * 602;
System.out.println(answer + "00000000000000000000Atoms");

【讨论】:

  • 我正要写这个。如果你总是希望最后有这么多零,为什么还要处理这么大的数字呢?
  • @MMM 根据他提供的代码,问题 expects 会有这么多零。必要时我仍然使用BigInteger
  • 这就是我要说的。
【解决方案4】:

Dima Goltsman 是正确的,您必须使用 BigInteger 修复它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多