程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

全国高校计算机能力挑战赛编程题(全国高校计算机能力挑战赛程序设计)

balukai 2025-01-31 11:52:03 文章精选 5 ℃

题目:

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


输入说明:起始数字N;

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

输入样例:123456

输出样例:124100



解题思路

输入不能大于100000000(八个0),输入大于100000000的就不符合区间,直接输出F。所以我们设置小于100000001时执行for内循环。假如能找到符合条件的数,直接跳出外循环。



代码实例


import java.util.Scanner;

public class NiXu {
    public static void main(String[] args) {
        long remainder = 0;
        long reNumber = 0;
        Scanner scanner = new Scanner(System.in);
        Long inputN = scanner.nextLong();
        Long number = inputN;
        //System.out.println(reNumber);

        //判断是否存在
        //不存在返回F

        outer: for(int j=0;j<1;j++) {
            inner: for (Long i = number; i < 100000001; i++) {
                //假设存在
                if (number * reNumber > 100000000-1 && number * reNumber < 200000000+1) {
                    //System.out.println("第一个符合条件的数");
                    System.out.println(number);
                    //System.out.println("输出1: "+ Long.valueOf(number*reNumber));
                    //System.out.println(number*reNumber);
                    break outer;
                } else {
                    number = number + 1;
                    //System.out.println(number);
                    long useNumber = number;
                    reNumber = 0;
                    while (useNumber != 0) {
                        remainder = useNumber % 10;  //输出逆序
                        useNumber = useNumber / 10;  //循环的次数
                        reNumber = reNumber * 10 + remainder;
                    }
                    //System.out.println(reNumber);
                }
            }
            //没找到则返回F
            System.out.println("F");
        }
    }
}

运行结果

12345678
40000000
123456789
F
123456
124100

知识点

内外循环的合理使用

求逆序数的方法

Tags:

最近发表
标签列表