繁体   English   中英

整数中第一位和最后一位数字之和

[英]sum of first and last digit in the integer

下面代码中写的方法需要取整数和整数中第一位和最后一位的结果和。

注意:虽然我知道正确的解决方案,但我问这个问题的原因是我需要了解为什么我的代码也不起作用,因为这使我成为更好的程序员,请帮助。

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。这是绝对正确的

但是如果保持 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;

如果数字小于 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;
}

在这种情况下:

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

请注意,在检查number > 0后更改number 这意味着当到达 if 语句时,number 可以为 0,如果它是 0,它将被接受为第一个数字,因为它满足条件number<=9 & number>=0 例如,当您使用 121 对其进行测试时,您的number 1211210 最后一个满足 if 语句并将第一个数字设置为 0。

在这种情况下:

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

在检查number > 0之前更改number 这意味着 if 语句永远不会有number = 0并且 firstdigit 永远不会是 0。例如,当你用 121 测试它时,你有number 121121这个值。 最后一个满足 if 语句并将第一个数字设置为 1。之后将number除以零,它变为 0 并停止while循环。

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

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM