Java整数位移后成倍数

Java 将整数的最后一位移到第一位,然后新的整数变成原数的2倍,怎么求这个数呢?整数位移,是先把数字转为String,然后转字符,再交换第一位跟最后一位位置,那怎么求该数呢?

img

看你想从多少范围找到这个值

应该是根本不存在这样的数
如果你确定答案存在,但是不知道取值范围,可以用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即可得到结果。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/226490
  • 这篇博客也不错, 你可以看下Java中判断某个String字符串是否包含特定字符串,并统计个数。
  • 除此之外, 这篇博客: 我说我精通字符串,面试官竟然问我Java中的String有没有长度限制!?|附视频讲解中的 String的长度限制 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 想要搞清楚这个问题,首先我们需要翻阅一下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常量池

    那么问题就来了,因为要进入常量池,就要遵守常量池的有关规定。

  • 您还可以看一下 颜群老师的Java基础入门课程中的 String经典习题小节, 巩固相关知识点