问题描述
  若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
  例如:给定一个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

解析:回文数我们应该都可以懂是什么意思。理一下解题思路:判断是不是回文数->如果是,输出第一步;如果不是,按照题目要求进行加法,同时记录步数->每做一步,进行一次判断看是不是回文数,直到找到或者不可能为止。

理清了思路之后,我们就比较好写代码了:

#include<iostream>
#include<string.h>
using namespace std;
char a[100];
int b[100]={0};
int result[102]={0};
int sum = 0;
void trans_num(char judge[])//将字符型转化成数字型
{for(int i = 0; i < sum; i++){if(judge[i]>='a'&&judge[i]<='z') b[i] = judge[i]-'a'+10;else if(judge[i]>='A'&&judge[i]<='Z')b[i] = judge[i]-'A'+10;elseb[i] = judge[i]-'0';}
}
void add(int judge[],int n)//实行加法运算 ,n表示n进制
{result[0] = 0;//手动初始化 for(int i = 0; i < sum; i++){result[i] += judge[i] + judge[sum-1-i];result[i+1] = result[i]/n;//进位 result[i] = result[i]%n;//本位 }    if(result[sum]!=0)//产生进位 {sum = sum + 1;}
}
void trans_result_to_b(int judge[])//将add结果放入到b数组中
{int j = 0;for(int i = sum-1; i >= 0; i--){b[j] = judge[i];j++;}
}
bool isPalindrome(int judge[])
{int flag = 1;int i = 0; int j = sum-1;while(1){if(judge[i]!=judge[j]){flag = 0;break;}else{if(i==j || i+1==j)    break;i++;j--;}}if(flag==0) return false;else return true;
}
int main()
{int N; //N进制 int step = 1;//记录步数 int flag = 0;//记录是否能找到回文数 cin>>N;getchar();//吃回车 gets(a);//获得数组 sum = strlen(a);//数组的长度 trans_num(a);//将字符型数组转化成数字型数组 add(b,N);//进行加法运算 trans_result_to_b(result);//将结果数组放到b数组中 if(isPalindrome(b)){cout<<"STEP=0"<<endl;}else{while(1){if(isPalindrome(b)){flag = 1;//找到回文数 break;}else if(step>30){flag = 0;//没有找到回文数 break;} else{add(b,N);//进行加法运算 trans_result_to_b(result);//将结果数组放到b数组中 step++;} } if(flag==1)cout<<"STEP="<<step<<endl;elsecout<<"Impossible!"<<endl;}    return 0;
} 

tips:在对数组进行处理,尤其是进行加法运算的时候,注意一下这里数据的特殊性——回文数,这就意味着数组从低位到高位元素分别为167或者761都是一样的。意识到这一点,就给我们计算带来了很大方便,不需要去考虑什么低位的数字权重高什么的。。。

最初的时候,进行进制转化时,我没有考虑到十六进制字母的转化,所以没有一次过,看来思维严密性还是有待提高。加油!

算法训练_ALGO14_回文数相关推荐

  1. 数据结构算法题:回文数的实现

    回文是指正读反读均相同的字符序列,如'abba'和'abdba'均是回文,但'good'不是回文.试写一个算法判断给定的字符序列是否为回文 (提示:将一半的字符入栈) 思路: 从题目可知,题目要求我们 ...

  2. 算法题7||回文数判断

    题目 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 分析 1.有题目可知,回文数的前提是正数,即所有负数均非回文数 2.小于10的值均为回文数 3.其他正整 ...

  3. 【基本算法--高精度计算】回文数

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

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

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

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

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

  6. 10000内的回文数c语言,回文数

    "回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如"我为人人,人人为我"等.在数学中也有这样一类数字有这样的特征,成为回文数(pa ...

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

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

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

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

  9. java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]9. 回文数(简单) 宫水三叶发布于 今天 15:30 题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从 ...

最新文章

  1. 20180313分块查找
  2. busybox rootfs 启动脚本分析(一)
  3. nginx负载均衡与反向代理
  4. Google大佬手把手教你从数据中挖掘价值:好产品是怎样炼成的
  5. Java EE开发四大常用框架(1)
  6. HTTP 长连接原理
  7. 一路山水到了这僻静的温柔乡
  8. 诗词温习集:跟梁瀚文一起重温诗词(宋词)之《雨霖铃.寒蝉凄切》宋.柳永
  9. 塞力斯是鸿蒙系统吗,赛力斯“驼峰”智能增程系统为何物?一亮相就引起行业沸腾...
  10. Zabbix报警机制 、 Zabbix进阶操作 、 监控案例
  11. CentOS如何拓展swap分区
  12. es6箭头函数_【知识点】ES6箭头函数、箭头函数与普通函数的区别
  13. kali WiFi密码破解分享
  14. djaogo知识点 python_Django基础知识点
  15. 显示器AutoColor原理(TSUM系列芯片)
  16. [附源码]Sprintboot计算机毕业设计飞越青少儿兴趣培训机构管理系统【源码+数据库+LW+部署】
  17. 3G/4G/5G通信模块重启设计细节
  18. JIRA Core、JIRA Software、JIRA Service Desk的区别
  19. iperf java_网络性能测试工具Iperf/Jperf
  20. HGAME 2017 or 2018 PWN levels

热门文章

  1. Html中的次方符号怎么写
  2. webpack快速构建项目
  3. PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8192 bytes)
  4. mysql 配置文件设置最大链接数 max_connections不生效
  5. 天天用 Spring,bean 实例化原理你懂吗?
  6. 面试必问!有没有比读写锁更快的锁?
  7. 京东把 Elasticsearch 用的真牛逼!
  8. java ConcurrentHashMap 实现原理
  9. 结构型模式:装饰模式
  10. html表格选择一行,vue + element table表格如何默认选中第一行