Java 将整数的最后一位移到第一位,然后新的整数变成原数的2倍,怎么求这个数呢?整数位移,是先把数字转为String,然后转字符,再交换第一位跟最后一位位置,那怎么求该数呢?
看你想从多少范围找到这个值
应该是根本不存在这样的数
如果你确定答案存在,但是不知道取值范围,可以用while循环,一直找到答案就break
将整数的最后一位移到第一位,需要先将整数转为字符串,再将字符串转为字符数组操作:
int num = 12345; // 原数
String numStr = String.valueOf(num); // 转为字符串
char[] numArr = numStr.toCharArray(); // 转为字符数组
char lastChar = numArr[numArr.length - 1]; // 取出最后一位
for (int i = numArr.length - 1; i >= 1; i--) {
numArr[i] = numArr[i - 1]; // 从后往前移动一位
}
numArr[0] = lastChar; // 将最后一位移动到第一位
String newNumStr = new String(numArr); // 将字符数组转为字符串
int newNum = Integer.parseInt(newNumStr); // 将字符串转为整数
然后,将新的整数变成原数的2倍,只需要将新数乘以2即可:
newNum *= 2;
综合起来,完整的代码如下:
int num = 12345; // 原数
String numStr = String.valueOf(num); // 转为字符串
char[] numArr = numStr.toCharArray(); // 转为字符数组
char lastChar = numArr[numArr.length - 1]; // 取出最后一位
for (int i = numArr.length - 1; i >= 1; i--) {
numArr[i] = numArr[i - 1]; // 从后往前移动一位
}
numArr[0] = lastChar; // 将最后一位移动到第一位
String newNumStr = new String(numArr); // 将字符数组转为字符串
int newNum = Integer.parseInt(newNumStr); // 将字符串转为整数
newNum *= 2; // 将新数乘以2
System.out.println(newNum); // 输出新数
运行上述代码,将输出新的数字:24690。
GPT 给的答案如下,看看有没有借鉴意义
int num = 12345;
String numStr = Integer.toString(num);
char[] numChar = numStr.toCharArray();
char temp = numChar[0];
numChar[0] = numChar[numChar.length - 1];
numChar[numChar.length - 1] = temp;
int newNum = Integer.parseInt(new String(numChar)) * 2;
System.out.println(newNum);
首先将整数转换为字符串,并将字符串转换为字符数组,然后交换第一位和最后一位的位置。接着将交换后的字符数组转换为字符串并转换为整数,最后将该整数乘以2即可得到结果。
想要搞清楚这个问题,首先我们需要翻阅一下String的源码,看下其中是否有关于长度的限制或者定义。
String类中有很多重载的构造函数,其中有几个是支持用户传入length来执行长度的:
public String(byte bytes[], int offset, int length)
可以看到,这里面的参数length是使用int类型定义的,那么也就是说,String定义的时候,最大支持的长度就是int的最大范围值。
根据Integer类的定义,java.lang.Integer#MAX_VALUE
的最大值是2^31 - 1;
那么,我们是不是就可以认为String能支持的最大长度就是这个值了呢?
其实并不是,这个值只是在运行期,我们构造String的时候可以支持的一个最大长度,而实际上,在运行期,定义字符串的时候也是有长度限制的。
如以下代码:
String s = "11111...1111";//其中有10万个字符"1"
当我们使用如上形式定义一个字符串的时候,当我们执行javac编译时,是会抛出异常的,提示如下:
错误: 常量字符串过长
那么,明明String的构造函数指定的长度是可以支持2147483647(2^31 - 1)的,为什么像以上形式定义的时候无法编译呢?
其实,形如String s = "xxx";
定义String的时候,xxx被我们称之为字面量,这种字面量在编译之后会以常量的形式进入到Class常量池。
那么问题就来了,因为要进入常量池,就要遵守常量池的有关规定。