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);
}