for循环中的除数神秘地(?)改变

Divisor value in for loop is mysteriously (?) changing

所以我已经处理了好几个小时了,老实说,我完全被困住了。我写了一个 for 循环来计算整数中数字的数量,但我发现一旦我输入超过 10 位数的数字,除数值就会发生变化,但我不明白为什么。我在互联网上搜索无济于事,所以如果您有任何帮助或提示,我将不胜感激。谢谢!

 public static int getNumberOfDigits(long creditCardNumber)
{
    //problem with 0's at beginning and more than 10 digits
    int nDigitsInCard = 0;
    int divisor = (int) creditCardNumber;
    for(int i = 0; i <= creditCardNumber; i++){
        while(divisor!=0){
            divisor/=10;
            ++nDigitsInCard;
        }
}
    // return the number of digits in nDigitsInCard

    return nDigitsInCard;
}

ints 不能容纳大于 2,147,483,647 的数字。您需要坚持使用 longs 才能处理更大的数字。

整数最多只能容纳 2 ^ 32 - 1。此外,为什么要将输入参数强制转换为整数?

另一件事是,您正在计算导致除数的每个数字中的位数,因为您从 0 一直循环到 for(int i = 0; i <= creditCardNumber; i++){ ... } 中的 creditCardNumber。因此,例如 10000 将 return 1 中的位数,2 中的位数,一直到 10000。

最后,整个功能可以在一行中完成

return Long.toString(creditCardNumber).length();

return creditCardNumber.toString().length();

如果您将 creditCardNumber 更改为 Long 而不是 long,但您必须在末尾使用 l 后缀来调用它。

如果你想要更短的东西,你可以做

return (creditCardNumber+"").length();

当您的数字大于 10 位时,到整数的转换不会完成,因为整数不能包含大于 2^31 - 1 或 2,147,483,647 的值,这是一个只有 10 的数字数字。我建议坚持 long.