AcWing 1501. 回文数
原题链接
简单
作者:
xxxxuu
,
2021-05-26 22:42:52
,
所有人可见
,
阅读 295
#include <iostream>
#include <vector>
using namespace std;
bool check(vector<int>& a){ //判断是否为回文数
vector<int> temp(a.rbegin(),a.rend());
if(a==temp) return true;
return false;
}
vector<int> add(vector<int>& a,vector<int>& b){ //高精度加法
vector<int> c;
int temp=0; //两个数当前位与进位之和
int t=0; //进位
for(int i=0;i<a.size();i++){
temp=a[i]+b[i]+t;
c.push_back(temp%10);
t=temp/10;
}
if(t) c.push_back(t); //最高位进位不为0,再加上进位
return c;
}
int main(){
string n;
int k,cnt=0;
cin>>n>>k;
vector<int> a;
for(int i=n.size()-1;i>=0;i--) a.push_back(n[i]-'0');
if(!check(a)){//a如果为回文数直接输出
for(int i=0;i<k;i++){
vector<int> b(a.rbegin(),a.rend()); //rbegin()与rend()为反向迭代器,b为a的反转
a=add(a,b);
cnt++;
if(check(a)) break; //得到回文数跳出循环
}
}
//输出
for(int i=a.size()-1;i>=0;i--){
cout<<a[i];
}
cout<<endl;
cout<<cnt;
return 0;
}