题目描述:

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
现在,我们给定一个N进制数m,将该N进制数与其转置后得到的数n(也就是把该N进制数从右向左读)相加,判断其和m+n是否为回文数。如果在30步内得到的和为回文数,则输出STEPnum(num为得到该结果所用的步数),否则重复之前的过程。如果在规定步数内未得到回文数,则输出"Impossible!".
例如:xian给定一个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<=10,N=16)进制数M,每组的第一行输入N,第二行输入M。

输出格式:

   对于每组输入数据,输出最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出"Impossible!"。 

限制:

空间限制:125MByte
时间限制:1秒

样例:

输入:9
87
输出:STEP=6

该题涉及了进制转换和高精度

一切尽在代码掌控之中:

#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0,step=0,b[110],c[110];
char a[111];
bool pd(int k[],int len){if(len%2==0){int i=0,j=len-1;while(i<j){if(k[i]!=k[j])return false;i++;j--;}return true;}if(len%2!=0){int i=0,j=len-1,mid=(len-1)/2;while(i<mid&&j>mid){if(k[i]!=k[j])return false;i++;j--;}return true;}
}
void change(int len){for(int i=0;i<len;i++){c[len-i-1]=b[i];}
}
void add(int len){int x=0;for(int i=0;i<len;i++){b[i]=b[i]+c[i]+x;x=b[i]/n;b[i]%=n;}b[len]=x;len++;if(b[len-1]==0)len--;step++;if(step>30){printf("Impossible!");return ;}if(pd(b,len)){printf("STEP=%d",step);return;} else {change(len);add(len);}return;
}
int main(){scanf("%d",&n);scanf("%s",a);for(int i=strlen(a)-1;i>=0;i--){if(n==16){if(a[i]>='0'&&a[i]<='9'){b[strlen(a)-i-1]=a[i]-48;c[i]=a[i]-48;}if(a[i]>='A'&&a[i]<='Z'){b[strlen(a)-i-1]=a[i]-55;c[i]=a[i]-55;}} else {b[strlen(a)-i-1]=a[i]-48;c[i]=a[i]-48;}}if(pd(c,strlen(a))){printf("STEP=0");return 0;}add(strlen(a));printf("\n");return 0;
}

回文数 详解(C++)相关推荐

  1. c语言程序判断一个字符串是否是回文数,详解判断回文字符串和回文数算法的C语言代码!...

    一.判断一个字符串是否为回文字符串 #include #include #include //包含strlen #define YES 1 #define NO  0 #define uchar un ...

  2. c语言多组数据判断回文字符串,详解判断回文字符串跟回文数算法的C语言代码...

    详解判断回文字符串和回文数算法的C语言代码! 一.判断一个字符串是否为回文字符串 #include #include #include //包含strlen #define YES 1 #define ...

  3. 论如何优雅的处理回文串 - 回文自动机详解

    写在前面 最近无意中看到了这个数据结构,顺便也就学习了一下. 而且发现网上关于这个算法的描述有很多地方是错的,在这里做了一些更正. 处理字符串的算法很多: KMP,E-KMP,AC自动机,后缀三兄弟: ...

  4. 求字符串中回文子串的个数(回文树详解)

    写法一: #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h ...

  5. LeetCode.516 最长回文子序列 详解

    题目详情 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bb ...

  6. java判断五位数回文数_【视频+图文】Java经典基础练习题(五):键盘输入一个五位数,判断这个数是否为回文数...

    能解决题目的代码并不是一次就可以写好的 我们需要根据我们的思路写出后通过debug模式找到不足再进行更改 多次测试后才可得到能解决题目的代码! 通过学习,练习[Java基础经典练习题],让我们一起来培 ...

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

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

  8. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

  9. 试题14 回文数(详解)

    题目: 一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数.比如121,2332都是回文数,13,4567度不是回文数. 任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得 ...

  10. 用c语言求五位回文数,C语言求回文数(详解版)

    问题描述 打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数). 问题分析 对于要判定的数n计算出其平方后(存于a),按照"回文数"的定义要将最高位与最低位 ...

最新文章

  1. [Oracle] - 性能优化工具(5) - AWRSQL
  2. Spring boot全面接管Spring MVC
  3. 服务端命令(dockerd)
  4. You C.A.N.大赛 解锁7大行业智能硬件创新密码
  5. linux 进程内存开销,linux下查看最消耗CPU、内存的进程
  6. 第2章 网页基础知识
  7. Linux安装Ncurses库
  8. jeesite缓存问题
  9. iOS nav加角标
  10. SpringBoot系列: 与Spring Rest服务交互数据
  11. Celery使用数据库代替rabbitmq
  12. MyEclipse 使用文档
  13. CSDN 个人博客域名设置
  14. php mysql 博客,PHP操作MySQL
  15. php市场调查问卷模板,市场调查问卷范文
  16. 无人驾驶学习笔记-NDT 配准
  17. 终于搞清前端和后端的区别啦!原来是这样的
  18. 很好的励志文章(特别针对刚刚进入职场的毕业生而写)
  19. 对开源软件的认识与实践-刘彬
  20. js递归实现字符串计算器,包含+-*/()

热门文章

  1. 文件和目录权限/更改所有者和所属组/umask/隐藏权限lsattr/chattr
  2. Picasso通过URL获取--用户头像的圆形显示
  3. [Jsoi2010]连通数
  4. Spring Mvc前台访问报404
  5. split添加limit参数
  6. linux下 根目录扩展
  7. 关于web.xml 中的 welcome-file-list 的认识
  8. 信息技术手册查重错误比对分析程序开发记录3
  9. android中自定义动态壁纸
  10. 55. GridPanel中getSelectionModel详解