最近看到一个问题, 突然感觉是一个算法题: 有一个整数,将该数的最后一位移到第一位,则新的整数变成原数的二倍,求该数. 不限制语言

zhangpan_soft 2023-06-20 14:35:17

有一个整数,将该数的最后一位移到第一位,则新的整数变成原数的二倍,求该数

 

简单的for循环可以实现, 作为一种解题方式, 大家自己都跑下.

 

个人提出一个思路, 位数小于2的直接废弃, 因为不可能是原数的2倍, 大家集思广益

...全文
352 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-06-20
精选
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/7967415, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态
水の尽头 2024-07-04
  • 打赏
  • 举报
回复

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);
}

}

水の尽头 2024-07-04
  • 打赏
  • 举报
回复

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;
    }
}

}

nice_cxf 2023-06-20
  • 打赏
  • 举报
回复

原来还是一道数学题,那边的思路略微有错,满足条件的应该是第一次B是是18位数字,以后每次+18位
52631578947368421是最小的17位的子根,*2到9,是18位的9个满足条件的数字,52631578947368421052631578947368421,是37位的子根,依次类推

zhangpan_soft 2023-06-20
  • 打赏
  • 举报
回复

        // 有一个整数,将该数的最后一位移到第一位,则新的整数变成原数的二倍,求该数
          
        // 最后一位小于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)
        
        //
zhangpan_soft 2023-06-20
  • 举报
回复
@zhangpan_soft 太难算了
zhangpan_soft 2023-06-20
  • 打赏
  • 举报
回复

// 有一个整数,将该数的最后一位移到第一位,则新的整数变成原数的二倍,求该数
        
        // 最后一位小于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)
        
        //
  • 我算不下去了

377,023

社区成员

发帖
与我相关
我的任务
社区描述
Java全栈社区
社区管理员
  • java李杨勇
  • 吃这么好
  • 阿莫 夕林
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧