题目
思路
一开始考虑到用deque容器来进行加减操作但是想到不好在中间处理,所以考虑还是用回字符串比较方便
思路就是先遍历一遍字符串发现是否为回文数,不是回文数就进行加减,之后再次判断直到满足题目要求为止
代码(迭代)
#include<iostream>
using namespace std;
void ADD(string & s)
{
string s1 = s;
int len = s.length();
short * SUM = new short[len];
for(int i = 0, j = len - 1; i < len; i++, j--)
{
SUM[i] = s[i] -'0' + s1[j] - '0';
}
int carry = 0;
for(int i = len - 1; i >= 0; i--)
{
SUM[i] += carry;
if(SUM[i] >= 10)
{
SUM[i] -= 10;
carry = 1;
}
else
{
carry = 0;
}
}
s = "";
if(carry)
{
s += '1';
}
for(int i = 0; i < len; i++)
{
s += '0' + SUM[i];
}
delete[] SUM;
//cout << s << endl;
}
int main()
{
string str;
int n ;
cin >> n;
while(n)
{
int temp = n % 10;
str.insert(0,1,temp + '0');
n /= 10;
}
//cout << str;
int times = 0;
FLAG:
int len = str.length();
for(int i = 1; i <= len / 2; i++)
{
if(str[i-1] != str[len - i])
{
times++;
ADD(str);
goto FLAG;
}
}
cout << times <<" " << str<< endl;
return 0;
}
代码(递归)
#include<iostream>
using namespace std;
void ADD(string & s)
{
string s1 = s;
int len = s.length();
short * SUM = new short[len];
for(int i = 0, j = len - 1; i < len; i++, j--)
{
SUM[i] = s[i] -'0' + s1[j] - '0';
}
int carry = 0;
for(int i = len - 1; i >= 0; i--)
{
SUM[i] += carry;
if(SUM[i] >= 10)
{
SUM[i] -= 10;
carry = 1;
}
else
{
carry = 0;
}
}
s = "";
if(carry)
{
s += '1';
}
for(int i = 0; i < len; i++)
{
s += '0' + SUM[i];
}
delete[] SUM;
//cout << s << endl;
}
int judge(string &str, int times)
{
int len = str.length();
for(int i = 1; i <= len / 2; i++)
{
if(str[i-1] != str[len - i])
{
ADD(str);
return judge(str,times + 1);
}
}
return times;
}
int main()
{
string str;
int n ;
cin >> n;
while(n)
{
int temp = n % 10;
str.insert(0,1,temp + '0');
n /= 10;
}
int times = judge(str,0);
cout << times << " " << str << endl;
}