当前位置: 首页 > 知识库问答 >
问题:

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

程举
2023-03-14

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

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

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。

我一点也不明白为什么会发生这种情况,请任何人解释一下。

共有3个答案

周和安
2023-03-14

在这种情况下:

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

请注意,您在选中number后更改number

在这种情况下:

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

您在检查number之前更改number

壤驷旭
2023-03-14

如果数字小于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;
}
贾沛
2023-03-14

让我们把它分成两部分。获取数字的最后一位,然后获取数字的第一位。

问题的第一部分很简单。这正是你已经拥有的;只需取数字的模10。

int lastdigit = number % 10;

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

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

就这样,你完成了。只需返回值。

return firstdigit + lastdigit;
 类似资料:
  • 我一直在尝试编写一个使用while循环返回输入的第一个和最后一个数字的程序。 到目前为止我得到的是: 看起来循环在我得到我想要的数字之前和之后运行。有没有指定哪一行我想打印?(在示例中,它是“第一个数字是9,最后一个数字是4。”)

  • 问题内容: 我需要定义数字的最后一位数字,并将其分配给值。此后,返回最后一位数字。 我的代码段无法正常工作… 码: 题: 如何解决这个问题? 问题答案: 刚回来; 即取模数。这将比解析字符串要快得多。 如果可以为负则使用

  • 我需要得到一个32位数字中的1位数字,其中只有一个1位(总是)。在C++或ASM中最快的方法。 例如

  • 我想取904并做9+0,但904是一个int变量。我确实尝试了下面的代码,但是如果用户更改了数字I,它并不总是有效的。

  • 问题内容: 我有DataFrame: 我想获得该列的第一四分位数,第三四分位数和中位数。为了获得中位数,我使用。 如何计算四分位数? 问题答案: 通过使用:

  • 问题内容: 我发布此消息是因为该主题刚刚在另一个问题/答案中提出,并且该行为没有得到很好的记录。 考虑数据框 我想获取由column定义的每个组的第一行和最后一行。 我试过了 但是,这并没有给我我所期望的。 如何获得每个组中的实际第一个和最后一个值? 问题答案: 一种选择是使用该方法: 但是,我还没有找到一种将它们整齐地聚合的方法。当然,总是可以使用构造函数: 注意:我明确使用了该属性,否则您必须