题目一:
解题思路:
采用 “ 双指针 ” 的思路去解题
回文数是一个在反转时保持不变的数,比如 :121,7等
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char arr[100] = {'0'};
cin >> arr;
int length = strlen(arr);
int begin = 0,end = length-1;
while(begin < end)
{
if(arr[begin] == arr[end])
{
begin++;
end--;
}
else
{
cout << "N" << endl;
return 0;//这里不建议使用 break 来终止循环
}
}
cout << "Y" << endl;
return 0;
}
题目二:
解题思路:
- 先利用 string 流存放最先输入的整数,
这是为了可以通过 for 循环将输入的整数的各位数字之和求出;
- 回文数字的判断方法有俩种:
一种是通过字符数组,
另一个方法是将数据逆置过来,然后再与原数比较
- 该题通过第二种解法求解
- 数据逆置的方法:
方法一:
方法二:
均见下面的参考代码
参考代码一(包括数据逆置方法一):
#include<bits/stdc++.h>
using namespace std;
int main( )
{
string data ;
cin >> data;
int new_data = 0;
for(int i = 0;i < data.length();i++)
{
new_data += data[i] - '0';
}
//要将数据逆置过来然后与原数据比对看是否为回文数字
int rev = 0;
int change = new_data,compare = new_data;
int count = 0;
while(change)//求出该数一共由几位数组成
{
count++;
change /= 10;
}
int tmp = pow(10,count-1);
while(new_data)
{
rev = rev + (tmp * (new_data % 10));
tmp /= 10;
new_data /= 10;
}
if(rev == compare)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
参考代码二(包括数据逆置方法二):
![]()
每一次均将等式右边的数值作为下一次表达式中的左值,
然后对其乘以 10,
再加上每一次的末尾数字
#include<bits/stdc++.h>
using namespace std;
int main( )
{
string data ;
cin >> data;
int new_data = 0;
for(int i = 0;i < data.length();i++)
{
new_data += data[i] - '0';
}
//要将数据逆置过来然后与原数据比对看是否为回文数字
int rev = 0;
int tmp = 0;
int compare = new_data;//用作最后的比较使用
while(new_data)//数据逆置方法二的核心
{
rev = tmp * 10 + (new_data%10);
tmp = rev;
new_data /= 10;
}
if(rev == compare)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}