我已经完成了一个程序,它可以反转长期的总和,但出于某种原因,当我试图反转两个长值的总和时,它会丢弃第一个数字。我使用的第一个数字是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秒)
答案 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中,则将保留前导零。