【题目描述】

若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 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.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible” 。

【输入】

给定一个N(2<N<=10或N=16)进制数M。

【输出】

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

【输入样例】

9 87

【输出样例】

6

【注意】
  1. string s; cin>>s;  要加入头文件 #include<string>
  2. 要注意终止条件,临界的时候,特别是要看看是不是有‘=’;
  3. 注意有时候处理下一个数的时候,要看清到底是+=还是=,否则会导致原本的值被改变
  4. n进制的计算只需要同位计算之后,用n进制的方法处理该位应该有的数和进位就可以了,不需要全部化为十进制
  5. 如果两个数是不同的进制的时候,再考虑用全部化为十进制

【代码】

#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int n, a[101], b[101], ans, i;
void initial(int a[])
{string s;cin >> n >> s;    //使用cin>>s, s为string类型时,要添加头文件#include<string>a[0] = s.length();for (int i = 1; i <= a[0]; i++){if (s[a[0] - i] >= '0'&&s[a[0] - i] <= '9')        //注意要从s逆序输入到a数组中,便于加法计算
        {a[i] = s[a[0] - i] - '0';}elsea[i] = s[a[0] - i] - 'A' + 10;    //注意这里还要加10
    }
}
bool judge(int a[])
//判断是否是回文数,不需要转到十进制再判断
//直接用原本的数比较就可以了
//因此前面转换到a数组的时候
//只需要把a b c...f转成数字便于储存
//而不需要把她们进位
{for (int i = 1; i <= a[0]; i++){if (a[i] != a[a[0] - i + 1])return false;}return true;
}
//n进制的计算,不需要全部化为10进制再计算,再化为n进制
//可以直接每位计算之后,再进行处理
//因为实际上区别是每一位的最大值
//十进制 %10, n进制 %n;
//进位 十进制 /10, n进制/n;
void Add(int a[])
{b[0] = a[0];for (int i = 1; i <= a[0]; i++){b[i] = a[a[0] - i + 1];}for (int i = 1; i <= a[0]; i++)    //注意以1开始,那么终止条件是有等号的,注意终止条件
    {a[i] += b[i];}for (int i = 1; i <= a[0]; i++)    //处理进位
    {a[i + 1] += a[i] / n;    //这里千万要注意!!a[i+1]本身也可能是有值的,不能直接覆盖,而是要+=a[i] %= n;}if (a[a[0] + 1] != 0)a[0]++;
}
int main()
{initial(a);if (judge(a)){cout << 0 << endl;return 0;}ans = 0;while (ans <= 30){ans++;Add(a);if (judge(a)){cout << ans << endl;return 0;}}cout << "Impossible" << endl;return 0;
}

转载于:https://www.cnblogs.com/xuwanwei/p/10841867.html

【基本算法--高精度计算】回文数相关推荐

  1. 「小算法」回文数与数值合法性检验

    喵喵喵,小夕最近准备复习一下数学和基础算法,尽量每篇推送下面会附带点数学和基础算法的小文章.说不定哪天就用(考)到了呢( ̄∇ ̄)注意哦,与头条位的文章推送不同,「小公式」和「小算法」里的小标题之间可能 ...

  2. 经典C语言算法之回文数

    经典C语言算法题之回文数 1.题目描述 2.题目解析 3.代码编写 4.题解心得 1.题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输 ...

  3. 【简单算法】回文数(C语言)

    概述 注水博客,期末emo加摆烂,想做做简单算法抚慰心灵: 题目描述 9.回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右) ...

  4. 算法练习题---回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  5. 蓝桥杯 ALGO-14 算法训练 回文数

    问题描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...

  6. Java算法:回文数

    一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数.比如 121121,23322332都是回文数,13,456713,4567 不是回文数. 任意一个正整数,如果其不是回文数,将该数交换 ...

  7. Python算法——2.回文数

    文章目录 一.题目分析 二.求解 1.方法一:截片 2.方法二:转换一半 提示:以下是本篇文章正文内容,下面案例可供参考 一.题目分析 给你一个整数 x ,如果 x 是一个回文整数,返回 true : ...

  8. python算法:回文数

    判断一个整数是否是回文数,回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数 重点来了:不能将整数转为字符串 下面这个方法比较笨哈哈,但是也比较好理解吧~ class Solution: d ...

  9. 4种算法 - 判断回文数

    题目 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: ...

  10. 【蓝桥杯】 算法训练 回文数

    问题描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数 又如:对于10进制数8 ...

最新文章

  1. [csu/coj 1078]多个序列的最长公共子序列
  2. jsp ajax三级联动,Spring MVC+JSP实现三级联动
  3. Android 下拉式抽屉折叠动画
  4. 大学生能从计算机游戏中受益,2017年12月英语四级作文范文:大学生玩游戏
  5. Facebook悄悄参加星际AI大赛,然后输了 | 中国团队夺得第四
  6. Atitit Hadoop的MapReduce的执行过程、数据流的一点理解。 目录 1. Why 为什么使用hadoop 1 2. Hadoop的MapReduce的执行过程 1 2.1. Had
  7. 日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
  8. 2017年第六届数学中国数学建模国际赛(小美赛)比赛心得
  9. 安装配置maven时因Java版本问题报错JAVA_HOME environment variable is not defined correctly
  10. Cpp--string常用函数用法总结
  11. Spring Boot Shiro原理系列
  12. python函数详细讲解_小白必看的Python函数讲解
  13. python列表获取最后一个元素的方法_在Python中获取列表的最后一个元素
  14. 黎曼猜想 量子计算机,理解黎曼猜想(一)背景
  15. 计算机打字无限长页面,Win10电脑键盘自动无限输入怎么办
  16. Hive-创建表的几种方式
  17. 改进埃尔米特(Hermite)分段三次插值——(可在pchip函数中自定义导数值)
  18. 沐神《动手学深度实战Kaggle比赛:狗的品种识别(ImageNet Dogs)
  19. 清浅时光,岁月静好——我的2016
  20. 2020.12.22 ps临摹调色

热门文章

  1. 存储过程基本概念和操作
  2. 如何用vr虚拟现实技术做线上数字展厅?
  3. 【附源代码】手把手教你用Python+uiautomator2手撸一款自动抢菜应用
  4. nodejs replaceAll
  5. js定时器与数码时钟案例(源码及备注)
  6. 东软JavaWeb实训记-DAY5-MyBatis框架+jsp传值+登录过滤器
  7. Windows定时自动关闭所有程序
  8. 纯HTML CSS设计翻页效果
  9. Android 4.0以上设备的虚拟按键中menu键的显示问题
  10. 用计算机计算有什么特点,计算机的主要特点有哪些