整数的第一位和最后一位的和

时间:2018-11-16 13:46:30

标签: java integer

以下代码中编写的方法需要取整数,并将结果的第1位和最后一位数字相加。

注意:尽管我想知道正确的解决方案,但我问这个问题的原因是我需要了解为什么我的代码也无法正常工作,因为这使我成为一个更好的程序员,请帮忙。

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块如下所示,则我保持number / = 10

if(number<=9 & number>=0){
                        firstdigit=number;
                    }
number/=10;

然后我的代码给出了正确的结果。就像如果我在方法中输入121时,第一位数为1,第二位数为1,则是将两者相加并得出2。这是绝对正确的

但是如果保持数字/ = 10高于if块,如下所示

 number/=10;
    if(number<=9 & number>=0){
                            firstdigit=number;
                        }

然后我的代码未给出正确的结果,它仅给出了最后一个数字1。

我根本不理解为什么会这样。

4 个答案:

答案 0 :(得分:1)

让我们分为两部分。获取数字的最后一位,并获取数字的第一位。

问题的第一部分很容易。它正是您已经拥有的;只需取数字的模10。

int lastdigit = number % 10;

第二部分有点棘手,但不要太多。当数字大于10时,将其除以10(使用整数,其余部分将被截断)。我在您的解决方案中看到的一个问题是,即使发现了数字,您仍会继续检查该值。也就是说,如果该值为1234,则可以正确找到1,然后通过额外的循环迭代将其覆盖为0

int firstdigit = number;
while (firstdigit >= 10) {
    firstdigit /= 10;
}

就这样,您就完成了。只需返回值即可。

return firstdigit + lastdigit;

答案 1 :(得分:1)

如果数字小于0,则返回-1。否则,最后一个数字可以通过模数10找到,第一个数字可以通过除以10直到该数字小于10来找到。

public static int sumFirstAndLastDigit(int number) {
    if (number < 0) {
        return -1;
    }

    int last = number % 10;
    int first = number;
    
    while (first >= 10) {
        first = first / 10;
    }

    return first + last;
}

答案 2 :(得分:0)

在这种情况下:

while(number>0)
{
    number/=10;
    if(number<=9 & number>=0){
        firstdigit=number;
    }
}

请注意,您在选中number后更改了number > 0。这意味着该数字在到达if语句时可以为0;如果为0,则它​​可以满足第number<=9 & number>=0个条件,因此可以作为第一位数字。例如,当您用121进行测试时,您具有number 1211210的值。最后一个满足if语句,并将第一个数字设置为0。

在这种情况下:

while(number>0)
{
    if(number<=9 & number>=0){
        firstdigit=number;
    }
    number/=10;
}

您先更改number,然后再检查number > 0。这意味着if语句永远不会有number = 0,firstdigit永远不会为0。例如,当您用121测试它时,number 121,{{ 1}}和12。最后一个满足if语句并将第一位数字设置为1。之后,将1除以零,然后变为0,并停止number循环。

答案 3 :(得分:-1)

这不是直接解决您的问题的方法,但是我们可以使用正则表达式和基本方法轻松解决此问题:

int number = 12345678;
String val = String.valueOf(number);
val = val.replaceAll("(?<=\\d)\\d+(?=\\d)", "");
number = Integer.parseInt(val);
int sum = number % 10 + number / 10;
System.out.println(sum);