java - 为什么我的计算是错误的?Java反向int问题
问题描述
这是我假设反转并返回给定整数的函数:
public static int reverse(int x) {
List<Integer> digits = new ArrayList<>();
int result = 0, count = 0;
while(x != 0) {
digits.add(x % 10);
x /= 10;
count++;
}
System.out.println(digits);
int i = 0;
while(count != 0) {
result += digits.get(i) * (int) Math.pow(10, count - 1);
System.out.printf("result: %d i: %d, count: %d - ", result, i, count);
System.out.printf("%d * %d\n", digits.get(i), (int) Math.pow(10, count - 1));
count--;
i++;
}
return result;
}
我遇到了一个问题。例如,当我传递 1534236469 的值时,会发生以下情况:
result: 410065408 i: 0, count: 10 - 9 * 1000000000
.
.
.
1056389759
为什么会这样?也欢迎所有关于使这个功能更好的提示。
解决方案
也欢迎所有关于使这个功能更好的提示。
一个简单的实现可以如下:
public class Main {
public static void main(String[] args) {
int x = 123456789;
int y = reverse(x);
System.out.println(x);
System.out.println(y);
}
public static int reverse(int x) {
return Integer.parseInt(new StringBuilder(String.valueOf(x)).reverse().toString());
}
}
输出:
123456789
987654321
此外,正如评论中已经提到的,当您将一个大于最大允许值的值分配给int
变量时,该值会从另一端转换为一个值,即Integer.MAX_VALUE + 1
变为Integer.MIN_VALUE
. 因此,对于一个整数,1534236469
其倒数大于int
变量可以容纳的值,您应该将倒数转换long
为如下所示的值:
public class Main {
public static void main(String[] args) {
int x = 1534236469;
long y = reverse(x);
System.out.println(x);
System.out.println(y);
}
public static long reverse(int x) {
return Long.parseLong(new StringBuilder(String.valueOf(x)).reverse().toString());
}
}
输出:
1534236469
9646324351
推荐阅读
- c - 应该将任何 C 文件作为二进制文件打开
- php - 什么会导致 %5B%5D 转换为 %5B0%5D?
- php - Wordpress not loading images
- html - Making a 3D arc using extrusion with HTML x3DOM
- python - spyder3:“ModuleNotFoundError:没有名为‘simplegeneric’的模块”
- mysql - 为表格中的每一行选择最近的点
- java - AES Initialization Vector randomization
- python - 将 python hangman 转换为 GUI
- android - 在 Android 中将 JSON 字符串编写为字符串
- php - 如何在 Twig 模板文件中运行 php 代码