for循环中的除数值是神秘的(?)变化

问题描述 投票:0回答:3

所以我已经在这里工作了几个小时,老实说,我完全陷入困境。我写了一个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;
}
java for-loop integer-division
3个回答
1
投票

ints不能持有大于2,147,483,647的数字。你需要坚持使用longs来处理更大的数字。


1
投票

整数只能保存最多2 ^ 32 - 1的数字。另外,为什么要将输入参数转换为整数?

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

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

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

要么

return creditCardNumber.toString().length();

如果你将creditCardNumber改为Long而不是long,但你最后必须用l后缀来调用它。

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

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

0
投票

如果数字大于10位,则转换为整数不会完成,因为整数不能保存大于2 ^ 31 - 1或2,147,483,647的数值,这是一个只有10位数的数字。我建议坚持使用long

© www.soinside.com 2019 - 2024. All rights reserved.