AcWing 1501. 回文数
原题链接
简单
作者:
goldstine
,
2021-07-16 22:52:26
,
所有人可见
,
阅读 263
题目描述
高精度加法
算法1
C++ 代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
vector<int> add(vector<int> &a,vector<int> &b){
if(a.size()<b.size()){
return add(b,a);
}
int t=0;
vector<int> c;
for(int i=0;i<a.size();i++){
t+=a[i];
if(i<b.size()){
t+=b[i];
}
c.push_back(t%10);
t/=10;
}
if(t){
c.push_back(t);
}
return c;
}
//将n逆序
vector<int> reve(LL e){
vector<int> res;
while(e){
res.push_back(e%10);
e/=10;
}
return res;
}
//判断是否是回文数
bool check(vector<int> cc){
int k=cc.size();
for(int i=0;i<=k/2;i++){
if(cc[i]!=cc[k-i-1]){
return false;
}
}
return true;
}
int main(){
LL n;int k;
cin>>n>>k;
int cnt=0;
vector<int> c;
c=reve(n);
while(k){
vector<int> u,v;
if(check(c)){
break;
}
//进行一次操作
u=c;
reverse(c.begin(),c.end());
v=add(u,c);
c=v;
cnt++;
k--;
}
for(int i=c.size()-1;i>=0;i--){
cout<<c[i];
}
cout<<endl;
cout<<cnt<<endl;
return 0;
}