AcWing 1501. 回文数
原题链接
简单
弄了好长时间才发现判断回文写错了😭
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
vector<int> vn;
string n;
int k;
bool hw(vector<int> vn)
{
for(int i=0;i<vn.size();i++)
if(vn[i]!=vn[vn.size()-i-1])
return false;
return true;//判断回文
}
vector<int> add(vector<int> n1,vector<int> n2)
{
reverse(n1.begin(),n1.end());
reverse(n2.begin(),n2.end());
vector<int>res;
int t=0;
for(int i=0;i<max(n1.size(),n2.size());i++)
{
if(i<n1.size())t+=n1[i];
if(i<n2.size())t+=n2[i];
res.push_back(t%10),t/=10;
}
if(t)res.push_back(t);
reverse(res.begin(),res.end());//一定要倒序输出
return res;
//高精度加法
}
int main()
{
cin>>n>>k;
int s=0;
for(int i=0;i<n.size();i++)vn.push_back(n[i]-'0');
while(!hw(vn))//只要不是回文数
{
if(hw(vn))break;
s++;
vector<int> p;//p为vn的从后往前打印的数
for(int i=vn.size()-1;i>=0;i--)
p.push_back(vn[i]);
vn=add(vn,p);//vn更新
if(s==k)break;//一旦次数达标,就跳出循环
}
for(int i=0;i<vn.size();i++)
cout<<vn[i];
if(hw(vn))
cout<<endl<<s<<endl;
else cout<<endl<<k<<endl;
return 0;
}