1024 Palindromic Number
题目大意
给出一个数,再给出一个步骤次数,判断在这么多次内,能否将一个数逆置后相加得到回文数。
算法思想
- 较为简单,实现逆置相加的函数即可
- 注意输入的数也有可能一开始就是回文数,次数为0
代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string rev(string s)//实现逆置后相加
{
string r = s, answer = "";
reverse(r.begin(), r.end());//逆置
int cou = 0;
for (int i = s.size() - 1; i >= 0; i--)//加法运算
{
answer = to_string((r[i] - '0' + s[i] - '0' + cou) % 10) + answer;
if ((r[i] - '0' + s[i] - '0' + cou) > 9)
cou = 1;
else
cou = 0;
}
if (cou)
answer = to_string(cou) + answer;//有更高进位
return answer;
}
bool pal(string s)//判断回文数
{
for (int i = 0; i < s.size() / 2; i++)
{
if (s[i] != s[s.size() - 1 - i])
return false;
}
return true;
}
int main()
{
string s, r;
int k;
cin >> s >> k;
for (int i = 0; i < k; i++)//有可能一开始就是回文数,从0开始
{
if (pal(s))//是回文数直接输出
{
cout << s << endl << i;
return 0;
}
s = rev(s);
}
cout << s << endl << k;
return 0;
}