额,中午刚写的大数加法还没出错
这才半天功夫。。。就写错了
卡了三小时,想都没往这个地方想。。。
这个最后一步是不是回文数无关与结果无关,当第K步是回文数,我这里不会判断它是回文数,反正最后一步是不是回文数,都要输出那个结果
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string sum(string s){//s与s转置相加
string rs = s;
reverse(rs.begin(),rs.end());
int carry = 0;//进位标识
for(int i = s.size() - 1; i >= 0; i--){
int temp = (s[i] - '0') + (rs[i] - '0') + carry;
rs[i] = temp % 10 + '0';
if(temp > 9){
carry = 1;
}
else{
carry = 0;
}
}
if(carry == 1){
return "1" + rs;
}
else{
return rs;
}
}
bool IsPali(string s){//判断是否是回文数
for(int i = 0; i < s.size()/2; i++){
if(s[i] != s[s.size() - i - 1]) return false;
}
return true;
}
int main(){
string s;
int k;
cin>>s>>k;
int step = k;
int flag = 0;//给定K次操作之内是否有解,值为“0”无解
for(int i = 0; i < k; i++){
if(IsPali(s)){//先判断,若输入数为回文数,直接跳出循环
step = i;
flag = 1;
break;
}
s = sum(s);
}
// if(flag == 0){
// step = k;
// }
cout<<s<<"\n"<<step;
return 0;
}