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;
}
int
s 不能容纳大于 2,147,483,647 的数字。您需要坚持使用 long
s 才能处理更大的数字。
整数最多只能容纳 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
.
所以我已经处理了好几个小时了,老实说,我完全被困住了。我写了一个 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;
}
int
s 不能容纳大于 2,147,483,647 的数字。您需要坚持使用 long
s 才能处理更大的数字。
整数最多只能容纳 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
.