java - 使用 Java 将随机数转换为回文数

标签 java palindrome

我试图让一个随机数成为回文。例如生成的随机数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/

相关文章:

java - 计算 ArrayList 中特定变量的出现次数

java - 读取顶点并创建边

java - RAM <4GB 的 64 位虚拟机上 Java 中的对象 header 大小

java - 为以下场景创建正则表达式

c++ - 如何打印出使用数组删除某些字符的回文?

java - 使用位数查找给定范围之间的回文数

java - 计算一个字符串中有多少个回文

java - 获取tomcat valve类中的webapp名称

python - 为什么某些实现在Python中运行缓慢?

c++ - 根据用户输入创建一个字符数组