用下面的代码编写的方法需要取整数,并将结果的第一个数字和最后一个数字相加。
注意:我问这个问题的原因虽然我知道正确的解决方案,但我需要了解为什么我的代码也无法正常工作,因为这使我成为一个更好的程序员,请提供帮助。
public class FirstLastDigitSum {
public static int sumFirstAndLastDigit(int number)//to add first and last
//digits of a given interger
{
int firstdigit=0;
int lastdigit=0;
if(number>=0 && number<=9)
{
return number+number;
}
else if(number>9)
{
lastdigit=number%10;
while(number>0)
{
number/=10;
if(number<=9 & number>=0){
firstdigit=number;
}
}
return firstdigit+lastdigit;
}
else
return -1;
}
public static void main(String[] args)
{
System.out.println(sumFirstAndLastDigit(121));
}
}
在上面的代码中,如果我在if块之后保留数字/ = 10,如下所示
if(number<=9 & number>=0){
firstdigit=number;
}
number/=10;
那么我的代码给出了正确的结果。就像如果我向方法中输入121的第一位数字是1而第二位数字是1一样,这两个数字都相加并得到2。这是绝对正确的
但是如果保持number / = 10高于if块,如下所示
number/=10;
if(number<=9 & number>=0){
firstdigit=number;
}
然后我的代码没有给出正确的结果,它只给出了最后一个数字1。
我完全不了解为什么会发生这种情况,任何人都可以解释一下。
最佳答案
让我们将其分为两个部分。获取数字的最后一位,并获取数字的第一位。
问题的第一部分很容易。它正是您已经拥有的;只需取数字的10为模。
int lastdigit = number % 10;
第二部分有点棘手,但不要太多。当数字大于10时,将其除以10(使用整数,其余部分将被截断)。我在您的解决方案中看到的一个问题是,即使发现了数字,您仍会继续检查该值。这意味着如果值是
1234
,则可以正确找到1
,然后通过额外的循环迭代将其覆盖为0
int firstdigit = number;
while (firstdigit >= 10) {
firstdigit /= 10;
}
就是这样,您就完成了。只需返回值即可。
return firstdigit + lastdigit;
关于java - 整数的第一位和最后一位的和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53339113/