首页 > 解决方案 > 你如何编写一个java程序来生成前100个回文数(从11、22等开始),每行10个数字

问题描述

我知道您必须使用 for 循环,并且我已将其范围缩小到使用整数的长度来比较所述整数的某些位置以确定它是否是回文。你怎么会得到整数的长度呢?我不需要完整的代码,我只需要知道您将如何获得长度,因为我很肯定我的想法会起作用。

编辑)我让它工作,但我必须每行分隔 10 个回文数。如何做到这一点?如果有帮助,我应该分享我的代码吗?像这样:1,2,3,4,5,6,7,8,9,10 11,12,13,14,15,16,17,18,19,20

编辑#2)我完成了这个,但我不确定我应该关闭这个问题还是删除它,因为这对其他人来说似乎是一个常见的问题。谢谢大家!但是,它有效。我只是在每个循环中反转数字,如果它等于 originL,那么它就是回文。

标签: java

解决方案


使用RxJava

import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.functions.Consumer;

public class Palindro {
    private static boolean isPalindrome(int x) {
        String s1 = String.valueOf(x);
        StringBuilder r1 = new StringBuilder(s1).reverse();
        return r1.toString().equals(s1);
    }

    public static void main(String[] args) {
        Observable.range(11, Integer.MAX_VALUE - 10)
                  .filter(x -> isPalindrome(x))
                  .take(100)
                  .subscribe(new Printer());
    }
}

class Printer implements Consumer<Integer> {
    private int counter;

    @Override
    public void accept(Integer t) throws Throwable {
        if (counter % 10 == 0) {
            System.out.println();
        }
        System.out.printf("%d  ", t);
        counter++;
    }
}

take如果您想要少于或多于前 100 个回文数,只需将参数更改为方法。


推荐阅读