回文数 详解(C++)
题目描述:
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
现在,我们给定一个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++)相关推荐
- c语言程序判断一个字符串是否是回文数,详解判断回文字符串和回文数算法的C语言代码!...
一.判断一个字符串是否为回文字符串 #include #include #include //包含strlen #define YES 1 #define NO 0 #define uchar un ...
- c语言多组数据判断回文字符串,详解判断回文字符串跟回文数算法的C语言代码...
详解判断回文字符串和回文数算法的C语言代码! 一.判断一个字符串是否为回文字符串 #include #include #include //包含strlen #define YES 1 #define ...
- 论如何优雅的处理回文串 - 回文自动机详解
写在前面 最近无意中看到了这个数据结构,顺便也就学习了一下. 而且发现网上关于这个算法的描述有很多地方是错的,在这里做了一些更正. 处理字符串的算法很多: KMP,E-KMP,AC自动机,后缀三兄弟: ...
- 求字符串中回文子串的个数(回文树详解)
写法一: #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h ...
- LeetCode.516 最长回文子序列 详解
题目详情 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bb ...
- java判断五位数回文数_【视频+图文】Java经典基础练习题(五):键盘输入一个五位数,判断这个数是否为回文数...
能解决题目的代码并不是一次就可以写好的 我们需要根据我们的思路写出后通过debug模式找到不足再进行更改 多次测试后才可得到能解决题目的代码! 通过学习,练习[Java基础经典练习题],让我们一起来培 ...
- 算法练习题---回文数
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...
- python判断是否回文_对python判断是否回文数的实例详解
设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...
- 试题14 回文数(详解)
题目: 一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数.比如121,2332都是回文数,13,4567度不是回文数. 任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得 ...
- 用c语言求五位回文数,C语言求回文数(详解版)
问题描述 打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数). 问题分析 对于要判定的数n计算出其平方后(存于a),按照"回文数"的定义要将最高位与最低位 ...
最新文章
- [Oracle] - 性能优化工具(5) - AWRSQL
- Spring boot全面接管Spring MVC
- 服务端命令(dockerd)
- You C.A.N.大赛 解锁7大行业智能硬件创新密码
- linux 进程内存开销,linux下查看最消耗CPU、内存的进程
- 第2章 网页基础知识
- Linux安装Ncurses库
- jeesite缓存问题
- iOS nav加角标
- SpringBoot系列: 与Spring Rest服务交互数据
- Celery使用数据库代替rabbitmq
- MyEclipse 使用文档
- CSDN 个人博客域名设置
- php mysql 博客,PHP操作MySQL
- php市场调查问卷模板,市场调查问卷范文
- 无人驾驶学习笔记-NDT 配准
- 终于搞清前端和后端的区别啦!原来是这样的
- 很好的励志文章(特别针对刚刚进入职场的毕业生而写)
- 对开源软件的认识与实践-刘彬
- js递归实现字符串计算器,包含+-*/()