PAT 1079 延迟的回文数 20分 自己写过了80%

70 阅读1分钟

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

image.png