首页 > 试题广场 >

回文数

[编程题]回文数
  • 热度指数:5528 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

例如:给定一个10进制数56,将56加56(即把56从右向左读),得到121是一个回文数。
又如:对于10进制数87:

STEP1:87+78  = 165                  STEP2:165+561 = 726

STEP3:726+627 = 1353                STEP4:1353+3531 = 4884

在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。

写一个程序,给定一个N(2<=N<=10N=16)进制数M,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”



输入描述:
两行,分别为N,M


输出描述:
STEP=ans
示例1

输入

9
87

输出

STEP=6
利用StringBuilder 反转字符串  +  一些Java的进制转换
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        // 输入
        int n = in.nextInt();  // N进制
        String m = in.next();  // 数字
        int step = 0;  // 多少步转换

        // 开始转换
        while (!huiwen(m) && step <= 30) {
            String m1 = m;  // 原数字 m1
            String m2 = new StringBuilder(m).reverse().toString(); // 反转的数字 m2

            Long t = Long.parseLong(m1, n) + Long.parseLong(m2, n); // N进制 转 10进制 (m1 + m2 不过是带进制的)
            m = Long.toString(t, n); // 10进制 转 N进制

            step++;
        }

        // 输出
        if (step <= 30)
            System.out.printf("STEP=%d", step);
        else
            System.out.printf("Impossible!");
    }

    // 判断s是否回文
    public static boolean huiwen(String s) { 
        return s.equals(new StringBuilder(s).reverse().toString());
    }
}



发表于 2025-01-26 13:50:32 回复(0)
java的题解给我绕晕了,按照他说的先换十进制相加之后再转回n进制没错啊
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int radix = in.nextInt();
        String m = in.next();
        int n = 0;
        while (n <= 30) {
            if (isPnum(m)) {
                break;
            }
            n++;
            m = add(m, getPnum(m), radix);
        }
        if (n > 30) {
            System.out.println("Impossible!");
        } else {
            System.out.println("STEP=" + n);
        }
    }

    // 这个数与他的回文数相加
    static String add(String x, String y, int radix) {
        long x1=Long.parseLong(x,radix);
        long y1=Long.parseLong(y,radix);
        long sum =x1+y1;
        return Long.toString(sum,radix);
    }

    // 得到数的倒数
    static String getPnum(String x) {
        StringBuilder sb =new StringBuilder();
        for(int i =0;i<x.length();i++) {
            sb.append(String.valueOf(x.charAt(x.length()-1-i)));
        }
        return sb.toString();
    }

    // 判断是否为回文数 是则返回1 否则返回这个数的回文数
    static boolean isPnum(String strY) {
        for (int i = 0; i < strY.length(); i++) {
            if (strY.charAt(i) != strY.charAt(strY.length() - 1 - i)) {
                return false;
            }
        }
        return true;
    }
}


发表于 2024-03-04 15:08:33 回复(0)

问题信息

难度:
3条回答 4599浏览

热门推荐

通过挑战的用户

查看代码
回文数