我试图让一个随机数成为回文。例如生成的随机数1234应该变成12344321。
所以我写了这段代码:
int num = (int)((Math.random()*100000)+1);
int palindrome = num;
System.out.println(num);
while (num > 0)
{
palindrome = palindrome*10+num%10;
num = num/10;
}
System.out.println("Palindrome: " + palindrome);
有时它会起作用,例如,我得到数字 6540 和回文数 65400456。但出于某种原因,在大多数情况下,我得到例如数字 94229 和回文数 833057657。或者数字 82270 和回文数 -362927364。
为什么会这样?此代码有什么问题以及如何修复它?
谢谢!
最佳答案
这是由于整数溢出。一个int
是 32 位宽,因此限于 -2,147,483,648
之间的值和 2,147,483,647
.
服用 94229
例如,9422992249
模 (1<<32)
是833057657
,这就是你得到的。
更改 int
s 至 long
s,这将增加您的代码能够处理的数字范围(当然,范围将保持有限)。
如果您需要更进一步, BigInteger
(或字符串)可能就是答案。
关于java - 使用 Java 将随机数转换为回文数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767804/