首页 > 学院 > 开发设计 > 正文

9. Palindrome Number

2019-11-08 01:14:23
字体:
来源:转载
供稿:网友

1.当要输出bool类型的值时,直接cout会输出0或者是1,这样要输 出true或者false的话,就要加上boolalpha,例如:

bool a = true;cout<<boolalpha<<a<<endl;输出结果:true

2.负数一定不是回文数

我的代码:(318ms)

#include "stdafx.h"#include<iostream>#include<vector>using namespace std;bool isPalindrome(int);int main(){ int x; bool a; while (cin >> x) { a = isPalindrome(x); cout << boolalpha <<a << endl; } return 0;}bool isPalindrome(int x){ vector<int> save; int rec = x; if (rec < 0) return false; while (rec) { save.push_back(rec % 10); rec = rec / 10; if (rec == 0) break; } if (save.size() % 2 == 0) for (int i = save.size() / 2 - 1, j = save.size() / 2; i >= 0, j < save.size(); i--,j++) { if (save[i] == save[j]) continue; else return false; } if (save.size() % 2 != 0) for (int i = save.size() / 2 , j = save.size() / 2; i >= 0, j < save.size(); i--, j++) { if (save[i] == save[j]) continue; else return false; } return true;}

大牛写的方法分析:

bool isPalindrome(int x) { //排除负数和以0结尾(不包括0)的可能 if(x<0|| (x!=0 &&x%10==0)) return false; int sum=0; while(x>sum) { sum = sum*10+x%10; //sum从x的右往左取位 x = x/10; //x从右往左减位 } //结果有两种可能1.sum与x的位数相等;2.sum比x多一位 //由于sum是从x的右往左取数的,所以当x的位数是偶数的话 //sum==x则表明x是回文数,若当x的位数是奇数的话,则当 //x==sum/10(去掉中间的那位数字)表明x是回文数 return (x==sum)||(x==sum/10); }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表