输出最少经过几步可以得到回文数
来源:互联网 发布:借身份证给别人开淘宝 编辑:程序博客网 时间:2024/06/05 07:47
题目: 若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。例如:87则有: STEP1: 87+78=165 STEP2: 165+561=726 STEP3: 726+627=1353 STEP4: 1353+3531=4884 编写一个程序输入M(12<=M<=100),输出最少经过几步可以得到回文数。 如果在8步以内(含8步)不可能得到回文数,则输出0。
下面是我写的程序代码:
#include<iostream>using namespace std;int backnum(int x) { //实现数字倒排 int r, m = 0; while (x > 0) { r = x % 10; m = 10 * m + r; x = x / 10; } /*该算法应记住,经常用来求倒序数字*/ return m;}bool isPalindrome(int x) { //判断是否为回文数 bool h = false; int r, m = 0, k; k = x; while (x>0) { r = x % 10; m = 10 * m + r; x = x / 10; } if (k == m) h = true; //必须用“==”,不能用”=“ return h;}int fun(int M) { int b, k = 0; do { b = backnum(M); M = M + b; k++; } while (!(isPalindrome(M))); //逻辑判定出错,应为! return k;}int main() { int M, k; cout << "请输入12-100中的一个整数:"; cout << endl; cin >> M; k = fun(M); if (k <= 8) cout << k << endl; else cout << "0" << endl; return 0;}
值得注意的是,fun函数中的这一段代码:
do { b = backnum(M); M = M + b; k++; } while (!(isPalindrome(M)));
应特别注意是!(isPalindrome(M))。
阅读全文
0 0
- 输出最少经过几步可以得到回文数
- 判断字符串是否可以通过交换相邻字符得到回文字符串,如果可以输出最少交换次数
- 最少步数
- 最少步数
- NYOJ 最少步数
- nyoj58 最少步数
- NYOJ58-最少步数
- 最少步数
- 最少步数
- 58 最少步数
- nyoj58最少步数
- NYOJ_58 最少步数
- nyoj58最少步数
- nyoj58最少步数
- nyoj 最少步数
- 最少步数BFS
- ACM58最少步数
- NYOJ【最少步数】
- 单进程日志分析
- JQuery 数组遍历方法
- 传统IO与NIO
- at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:536)
- python随机选取10000张图片并复制到另一个文件夹中
- 输出最少经过几步可以得到回文数
- facebook Android平台上动态列表的内存优化(Memory optimization for feeds on Android)
- java使 FileWriter FileReader 无编码格式,OutputStreamWriter InputStreamReader可设置编码格式
- java学习之------vector
- 通过itunes给iphone装ipa
- python3.5 安装matplotlib与依赖库安装教程
- 删除功能的 多余的 work copy
- JavaWeb项目structs2+spring+mybatis框架maven配置文件pom.xml实例
- ffmpeg Nvidia硬件加速总结