Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不丢失求和后的第一个数字的情况下求和?_Java_Math_Reverse_Long Integer - Fatal编程技术网

Java 如何在不丢失求和后的第一个数字的情况下求和?

Java 如何在不丢失求和后的第一个数字的情况下求和?,java,math,reverse,long-integer,Java,Math,Reverse,Long Integer,我已经完成了一个程序,它反转长和,但由于某种原因,当我尝试反转两个长值的和时,它会删除第一个数字。我使用的第一个数字是123456780000000000,第二个是1234567890。当我进行计算时,总数加起来是1234567891234567890,假设反过来是0987654321987654321。相反,我的程序删除零并返回结果987654321987654321。我的while循环数学关了吗?当你尝试更小的整数时,比如567和456=1023和3201。我认为当零位于任何值的末尾时,它会

我已经完成了一个程序,它反转长和,但由于某种原因,当我尝试反转两个长值的和时,它会删除第一个数字。我使用的第一个数字是123456780000000000,第二个是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中的异常:不可编译 源代码-错误的符号类型:at Exercise3.main(Exercise3.java:27) /Users/dgrate321/Library/Caches/NetBeans/8.2/executor-snippe‌​ts/run.xml:53: Java返回:1次生成失败(总时间:11秒)

相反,我的程序删除零并返回 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());
}

如果要将0保持在前面,请使用string.use string.formatter在输出到system.Outiteger时,将结果反转数中的任何前导0填充为0。Outiteger没有前导零。没有像
01
这样的整数,它是
1
。没有像
099
这样的数字,它是
99