1079 延迟的回文数 - PAT (Basic Level) Practice (中文) (pintia.cn)
自己慢慢调试,踩了一些坑,写出来了80%:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>v(2000);
vector<int> vv(2000);
//通过反转C,如果反转后得到 ·的B和C还是想等,那么说明就是回文数
bool check(int C)
{
vv.clear(); //每次都要清除
int A = C;
int B = 0;
while (A)
{
vv.push_back(A % 10);
A /= 10;
}
for (int i = 0; i < vv.size(); i++)
{
B = B * 10 + vv[i];
}
if (C == B)return true; //这里要拿B和C比而不是B和A比,A在上面拆位的时候变为0了
return false;
}
int main()
{
int x = 0; cin >> x;
int cnt=0; //cnt一定要初始化为0,不然会生成随机值,这辈子也变不到10
while (1)
{
//每一轮都要清空
int reverx = 0, sum = 0; v.clear();
int t = x; //要用一个变量接收x,x在下文拆位的时候会变为0
if (check(x))
{
cout << x << " is a palindromic number.";
break;
}
if (cnt >=10)
{
cout << "Not found in 10 iterations.";
break;
}
//拆位,为下一步逆转做准备
while (t)
{
v.push_back(t % 10);
t /= 10;
}
//逆转
for (int i = 0; i < v.size(); i++)
{
reverx = reverx * 10 + v[i];
}
sum = x + reverx;
cout << x << " + " << reverx << " = " << sum << endl;
x = sum;
cnt++;
}
return 0;
}