【思维题】与进制数关联的回文数

简介: 【思维题】与进制数关联的回文数

问题描述

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

  例如:给定一个10进制数56,将56加65(即把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<=10或N=16)进制数M(其中16进制数字为0-9与A-F),求最少经过几步可以得到回文数。

 如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”

输入格式

两行,N与M 输出格式

  如果能在30步以内得到回文数,输出“STEP=xx”(不含引号),其中xx是步数;否则输出一行”Impossible!”(不含引号)

样例输入

9

87

样例输出

STEP=6


思路:

先给定一个n进制数m

然后把m反过来再加上他自己作为下一个数,直到是回文数为止

最后返回step,如果大于30,打印impossible!
难点: 9进制、3进制……怎么实现?如果不是10进制,加减法其实很难在程序中写出来

第一步: 把这个数转化成10进制

注意:在转化之前我们需要先把这个数反过来,因为我们比的是这个进制的数而不是转化为10进制之后的数

第二步: 转化之后相加,之后再转化为这个进制的数,然后判断它是否是回文数。

如果是,输出结果,如果不是,重复第一步……
代码:

import java.util.Scanner;
public class HuiWenShu {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();// n进制
    String m = sc.next();// n进制数m(以字符串形式输入,方便操作)
    int count = 0;
    while (!isHuiWen(m)) {
      String temp = reverse(m);//先将其反转
      //将其本身和反转之后的进制数转化为10进制
      long s1 = Long.valueOf(m, n);
      long s2 = Long.valueOf(temp, n);
      long s3 = s1 + s2;//两个数相加
      //再转化为10进制作为下一次循环所用的数
      m = Long.toString(s3, n);
      if (count++ > 30) {
        System.out.println("Impossible!");
        break;
      }
    }
    if (count <= 30) {
      System.out.println("STEP=" + count);
    }
  }
  //字符串的反转
  private static String reverse(String m) {
    StringBuilder builder = new StringBuilder(m);//转换为StringBuilder提高效率
    StringBuilder builder2 = builder.reverse();
    return new String(builder2);//返回的还是String类型
  }
  //判断是否是回文数
  private static boolean isHuiWen(String m) {
    for(int i = 0,j = m.length() - 1;i <= j;i++,j--) {
      if(m.charAt(i) != m.charAt(j)) {
        return false;
      }
    }
    return true;
  }
}
相关文章
|
前端开发 JavaScript API
020 Umi@4 中如何实现动态菜单
020 Umi@4 中如何实现动态菜单
1295 0
020 Umi@4 中如何实现动态菜单
|
10月前
|
机器学习/深度学习 存储 人工智能
深度强化学习实战:训练DQN模型玩超级马里奥兄弟
本文介绍了如何利用深度学习和强化学习技术构建一个能够自主学习并完成《超级马里奥兄弟》游戏的智能系统。通过使用深度Q网络(DQN)架构,智能体在虚拟环境中与游戏进行交互,逐步优化其行为策略。文中详细描述了环境构建、神经网络设计、智能体-环境交互机制等关键步骤,并展示了系统的训练过程和最终表现。该研究不仅展示了强化学习在游戏领域的应用潜力,也为未来的研究提供了宝贵的经验和技术参考。
569 81
深度强化学习实战:训练DQN模型玩超级马里奥兄弟
Could NOT find Protobuf (missing: Protobuf_PROTOC_EXECUTABLE)
Could NOT find Protobuf (missing: Protobuf_PROTOC_EXECUTABLE)
1894 0
Could NOT find Protobuf (missing: Protobuf_PROTOC_EXECUTABLE)
|
9月前
|
算法 搜索推荐 安全
不属于五种算法是否无需备案?一文读懂算法备案的真相
在数字化时代,算法成为互联网服务的核心技术。为应对算法歧视、大数据杀熟等问题,我国出台了算法备案制度,规范算法使用,保护用户权益。五种常见算法(生成合成、个性化推送、排序精选、检索过滤、调度决策)需备案,但其他类型算法在特定情况下也需备案,如涉及舆论属性或社会动员能力。未备案将面临法律责任,企业应严格遵守规定,确保合规运营。算法备案不仅是法律要求,更是企业对社会责任的体现。
|
数据采集 机器学习/深度学习 数据可视化
过采样与欠采样技术原理图解:基于二维数据的常见方法效果对比
本文介绍了处理不平衡数据集的过采样和欠采样技术,包括随机过采样、SMOTE、ADASYN、随机欠采样、Tomek Links、Near Miss 和 ENN 等方法。通过二维数据集的可视化示例,直观展示了各种方法的原理和效果差异。文章还讨论了混合采样方法(如SMOTETomek和SMOTEENN)以及应用这些方法的潜在风险,强调了在实际应用中审慎选择的重要性。
797 3
|
存储 监控 数据可视化
ELK与Fluentd的结合
【6月更文挑战第18天】构建Python分布式日志系统,结合ELK(Elasticsearch、Logstash、Kibana)与Fluentd,用于日志收集、存储和分析。Fluentd作为数据收集器,接收Python应用日志,通过Logstash转发至Elasticsearch索引,Kibana提供可视化界面。流程包括安装配置ELK,配置Fluentd输入输出插件,Python中使用`fluent-logger`发送日志,Kibana查看分析数据。系统可扩展、优化,涉及数据格式化、性能调优、安全性和监控。
ELK与Fluentd的结合
|
Linux
通过ELRepo修改CentOS 7内核版本的详细步骤
通过ELRepo修改CentOS 7内核版本的详细步骤
1811 3
|
前端开发
表单设计器附件的上传、显示和下载
表单设计器附件的上传、显示和下载
145 1
表单设计器附件的上传、显示和下载
踩坑——使用了dispatchTouchEvent后控件点击无效问题
踩坑——使用了dispatchTouchEvent后控件点击无效问题
145 0
|
关系型数据库 MySQL 数据库
MySQL高可用与复制:确保稳定性与可靠性
本文深入研究了MySQL数据库中的高可用性与复制策略,通过详细的代码示例,介绍了复制的原理与架构,主从复制与读写分离的应用,以及高可用方案中的主备切换和故障转移。复制技术基于主从架构,使数据在多个数据库之间保持一致,提供了高可用性和数据冗余的保障。通过主从复制,数据库不仅能够实现高可用性,还可以通过读写分离来分担主数据库的负载,提升系统的性能。在高可用方案中,主备切换和故障转移是关键策略,可以在主数据库故障时快速切换到备库,确保系统的连续性。
631 0