如果一个数从左边读和从右边读都是同一个数, 就称为回文数
解答:
思想最简单的方法就是模拟,把各个数位取出来,然后比较。当然这种方法比较麻烦。
我们这次要用的方法如下:既然是回文数,那我们把各个数位上的数 正着 加起来跟 逆着 加起来的 和 是一样的。运用这条性质我们就可以很简单的解决这个问题。代码如下:
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int x = 0;
int s = n; // 拷贝一份
while(s>0){
x = x*10+s%10; //反向求和,s%10为取s的个位数,例,123取3
s = s/10; // 删除s的个位数,例,123变成12
}
if(x==n){
cout<<"YES!"<<endl;
}
else{
cout<<"NO!"<<endl;
}
return 0;
}
定义
记字符串w 的倒置为wR
例如:
(abcd)R=dcba
(abba)R=abba(abba)
对字符串x,如果x 满足 xR=xx
则称之为回文;例如abba是一个回文,而abed不是。
一、判断回文数
法一
思路:
将原数字倒序,比较是否还和原数相同。
特点:
此方法只适用于判断回文数,不能判断回文字符串。
此方法可以去除回文数可能存在的前导0再进行判断。
#include <iostream>
using namespace std;
int main() {
int n, t, s = 0;
cin >> n;
t = n; //拷贝一份n
while (t) {
//将t倒序存入s中,注意此方法会去除前导0
s = 10 * s + t % 10;
t /= 10;
}
s == n ? cout << "yes" : cout << "no";
return 0;
}
法二
思路:
用字符串读入,双指针判断对称位置字符是否相同。
特点:
此方法适用于判断回文字符串。
此方法不可去除数字可能存在的前导0。
#include <iostream>
using namespace std;
int main() {
s