
采用 “ 双指针 ” 的思路去解题
回文数是一个在反转时保持不变的数,比如 :121,7等
- #include
-
- 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
-
- 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
-
- 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;
- }