377,023
社区成员




有一个整数,将该数的最后一位移到第一位,则新的整数变成原数的二倍,求该数
简单的for循环可以实现, 作为一种解题方式, 大家自己都跑下.
个人提出一个思路, 位数小于2的直接废弃, 因为不可能是原数的2倍, 大家集思广益
public class Test {
public static void main(String[] args) {
int n = 12345;
System.out.println(findNumber(n));
}
public static int findNumber(int n) {
return n << 1 | (n & 1);
}
}
public class Main {
public static void main(String[] args) {
int num = 12345; // 输入的整数
System.out.println(findNumber(num));
}
/**
* 找到满足条件的整数:将该数的最后一位移到第一位,则新的整数变成原数的二倍
*
* @param original 原始整数
* @return 满足条件的整数
*/
public static int findNumber(int original) {
// 通过位操作找到最后一位,并将其移动到第一位
int lastBit = original & 1; // 获取最后一位
int shiftedNum = original >>> 1; // 将原数右移一位,丢弃最后一位
// 检查是否满足条件,如果最后一位移到第一位后是原数的两倍,则返回,否则返回-1表示不存在这样的数
if ((shiftedNum << 1) == (original | lastBit)) {
return original | lastBit;
} else {
return -1;
}
}
}
原来还是一道数学题,那边的思路略微有错,满足条件的应该是第一次B是是18位数字,以后每次+18位
52631578947368421是最小的17位的子根,*2到9,是18位的9个满足条件的数字,52631578947368421052631578947368421,是37位的子根,依次类推
// 有一个整数,将该数的最后一位移到第一位,则新的整数变成原数的二倍,求该数
// 最后一位小于2的舍弃
// 倒数第二位是奇数舍弃
// 小于10 舍弃
// 算法:
// 当数为两位,记为xy, 则: xy = x*10+y
// 反转为yx, 则: yx = y*10+x
// 10y+x = 20x+2y
// 10y=19x
// y/x = 19/10 无解
// 以此类推, 当数为n位, 记为m, 每位记为n1,n2...
// 则 m=n1+n2*10*(2-1)+n3*10*(3-1)+...+nn*10*(n-1)
// 取反的2m
// 则 2m = n1*10*(n-1) + n2*10*(2-2) + n3*10*(3-2) + ... + n(n-1)*10*(n-2)
// 则 m = n1*5*(n-1) + n2*5*(2-2) + n3*5*(3-2) + ... + n(n-1)*5*(n-2)
// 则 n1*5*(n-1) + n2*5*(2-2) + n3*5*(3-2) + ... + n(n-1)*5*(n-2) = n1+n2*10*(2-1)+n3*10*(3-1)+...+n(n-1)*10*(n-2)+nn*10*(n-1)
// 则 n1*5*(n-1) = n1+ 5*n2+5*n3+...+5*n(n-1) + 10*nn*(n-1)
// 则
// 有一个整数,将该数的最后一位移到第一位,则新的整数变成原数的二倍,求该数
// 最后一位小于2的舍弃
// 倒数第二位是奇数舍弃
// 小于10 舍弃
// 算法:
// 当数为两位,记为xy, 则: xy = x*10+y
// 反转为yx, 则: yx = y*10+x
// 10y+x = 20x+2y
// 10y=19x
// y/x = 19/10 无解
// 以此类推, 当数为n位, 记为m, 每位记为n1,n2...
// 则 m=n1+n2*10*(2-1)+n3*10*(3-1)+...+nn*10*(n-1)
// 取反的2m
// 则 2m = n1*10*(n-1) + n2*10*(2-2) + n3*10*(3-2) + ... + n(n-1)*10*(n-2)
// 则 m = n1*5*(n-1) + n2*5*(2-2) + n3*5*(3-2) + ... + n(n-1)*5*(n-2)
// 则 n1*5*(n-1) + n2*5*(2-2) + n3*5*(3-2) + ... + n(n-1)*5*(n-2) = n1+n2*10*(2-1)+n3*10*(3-1)+...+n(n-1)*10*(n-2)+nn*10*(n-1)
// 则 n1*5*(n-1) = n1+ 5*n2+5*n3+...+5*n(n-1) + 10*nn*(n-1)
// 则