题意很清晰,直接给出代码
// 20.06 -- 20.27
#include <iostream>
#include <string>
using namespace std;
string reverse(string s)
{
char c;
for (int i = 0, j = s.size() - 1; i <= j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
return s;
}
string sum(string a, string b) //两个数的长度肯定是一样的
{
string temp;
int sum, jin = 0, liu; //当前位的和、进位的数、进完留下的数
for (int i = a.size()-1, j = b.size()-1; i>=0&&j>=0; i--, j--)
{
sum = (a[i] - '0') + (b[j] - '0') + jin;
jin = sum / 10;
liu = sum % 10;
temp += char(liu + '0');
}
if (jin)
temp += char(jin + '0');
return reverse(temp);
}
bool isok(string s)
{
int i = 0, j = s.size() - 1;
while (i <= j)
{
if (s[i] != s[j])
return 0;
i++;
j--;
}
return 1;
}
int main()
{
string num1, num2;
int step;
cin >> num1 >> step;
if (isok(num1)) // 如果一开始就是回文串了,直接输出!
{
cout << num1 << endl << 0;
return 0;
}
for(int i = 1;i<=step;i++)
{
num2 = reverse(num1);
num1 = sum(num1, num2);
if (isok(num1))
{
cout << num1 << endl << i;
return 0;
}
if (i == step)
{
cout << num1 << endl << step;
}
}
return 0;
}