如何在总和反转之后反转长期总和而不丢失第一个数字?

时间:2017-04-13 22:54:06

标签: java math reverse long-integer

我已经完成了一个程序,它可以反转长期的总和,但出于某种原因,当我试图反转两个长值的总和时,它会丢弃第一个数字。我使用的第一个数字是1234567890000000000,第二个是1234567890.当我进行计算时,总计增加到1234567891234567890,并假设反转为0987654321987654321。相反,我的程序会丢弃零并返回结果987654321987654321.我的while循环算法是否关闭?当您尝试较小的整数,如567和456 = 1023反转3201.我认为当零点在任何值的末尾时,它会反向错误。

import java.math.*;
import java.util.Scanner;
import java.lang.*;

public class Exercise3
{    
    public static void main(String args[])

    {

       Scanner sc = new Scanner(System.in);

       System.out.println("Enter first number: ");

       long n1 = sc.nextLong();

       System.out.println("Enter second number: ");

       long n2 = sc.nextLong();

       long sum = n1+n2;

       long reverseSum = 0;

       long rem;

       while(sum != 0)
       {
        rem = sum % 10;
        reverseSum = reverseSum * 10 + rem;
        sum = sum / 10;
       }

       System.out.println("The reversed sum is " + reverseSum);

     } 

}

修改

尝试下面的代码后,我收到编译错误:

StringBuilder reverseSum = new StringBuilder(sum);
System.out.println("The reversed sum is " + reverseSum.reverse());
String tempValue = reverseSum.toString(); 
  

线程中的异常" main" java.lang.RuntimeException:无法编译   源代码 - 错误的sym类型:at   Exercise3.main(Exercise3.java:27)   /Users/dgrate321/Library/Caches/NetBeans/8.2/executor-snippe TS / run.xml:53:   Java返回:1 BUILD FAILED(总时间:11秒)

2 个答案:

答案 0 :(得分:2)

  

相反,我的程序会丢弃零并返回结果   987654321987654321.我的while循环算法是否关闭?

问题不在于您的代码,您只是不能使用前导0的整数值。如果你想保持领先0,你需要将它存储为字符串。

StringBuilder reverseSum = new StringBuilder(Long.toString(sum));
System.out.println("The reversed sum is " + reverseSum.reverse());

如果您希望将StringBuilder作为字符串:

String tempValue = reverseSum.toString();

修改

这是完成手头任务的完整代码:

public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter first number: ");
    long n1 = sc.nextLong();
    System.out.println("Enter second number: ");
    long n2 = sc.nextLong();
    long sum = n1+n2;

    StringBuilder reverseSum = new StringBuilder(Long.toString(sum));
    System.out.println("The reversed sum is " + reverseSum.reverse());
}

答案 1 :(得分:0)

Longs不存储前导零。 因此,因为您将数字存储为长,所以删除了前导零。 但是,如果将数字存储在String中,则将保留前导零。