未知位数的数求逆序数问题【java版】

 题目要求:

从大于等于N的正整数里找到一个最小的数M,使之满足:M和M的逆序数(如1230的逆序数为321)的差的绝对值为一个[100000,200000]区间内的值。

输入说明:起始数字N;

输出说明:找到的第一个符合条件的数,如果没有符合条件的数,输出F。

输入样例:123456

输出样例:123462 

 关键思路: 

         找逆序数代码,定义方法 reverseNumber,它接受一个整数 num 作为参数,并返回将该整数逆序后的结果。

        代码中使用了一个 while 循环来进行逆序操作。循环的条件是 num 不等于 0,即当 num 不为 0 时,继续执行循环体内的代码。

        在循环体内,我们首先通过 num % 10 取出 num 的个位数(即最后一位数字),并将其存储在变量 digit 中。

        然后,我们将 reverse 乘以 10,再加上 digit,这样就将 digit 添加到了 reverse 的个位数位置上。接着,我们将 num 除以 10,这样可以将 num 的个位数去除,相当于将 num 右移一位。

         通过循环的迭代,每次都将 num 的个位数添加到 reverse 的个位数位置上,并将 num 右移一位,直到 num 变为 0,循环结束。 我们返回得到的 reverse,即将原始整数 num 进行逆序后的结果。 

代码展示:
public class Demo5 {
    public static void main(String[] args) {
        int N = 123456;
        int M = findNumber(N);//调用方法找数
        if (M != -1) {
            System.out.println(M);
        } else {
            System.out.println("F");
        }
    }

    //寻找符合条件的数
    public static int findNumber(int N) {
        for (int M = N; M <= 1000000; M++) {
            int reverseM = reverseNumber(M);//调用函数获取逆序数
            int difference = Math.abs(M - reverseM);//求差值的绝对值
            if (difference >= 100000 && difference <= 200000) {
                return M;//找到返回该数
            }
        }
        return -1;//找不到返回-1
    }
    //未知位数的数求逆序数
    public static int reverseNumber(int num) {
        int reverse = 0;
        while (num != 0) {
            int digit = num % 10;
            reverse = reverse * 10 + digit;
            num /= 10;
        }
        return reverse;
    }
}
运行截图: 

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值