题目大意:
判断一个字符串是否是回文串,不是就和它的倒置字符串相加,直到结果是回文串为止。如果这样的操作进行十次后还不是回文串,那么就输出“Not found in 10 iterations.”。
解题思路:
用字符串模拟大整数相加即可。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[1100],b[1100];
bool judge(char c[])//判断是否是回文串
{
int len=strlen(c);
for(int i=0;i<len/2;i++)
{
if(c[i]==c[len-i-1])continue;
else return false;
}
return true;
}
int main()
{
scanf("%s",a);
int oper=0;//计算加法执行的次数
strcpy(b,a);
bool flag=true;
while(!judge(b))
{
if(oper>=10)//第十次仍未得到回文串
{
flag=false;
break;
}
int len=strlen(a);
reverse(b,b+len);//翻转b串
printf("%s + %s = ",a,b);
int cur=0,jin=0,sum=0;
for(int i=0;i<len;i++)//模拟大整数加法
{
int tmp1=a[i]-'0',tmp2=a[len-i-1]-'0';
sum=tmp1+tmp2+jin;
int yu=sum%10;
char t=yu+'0';
b[cur++]=t;
jin=sum/10;//保存上一位的进位
}
if(jin)b[cur++]=jin+'0';//最后如果还有进位的话
reverse(b,b+cur);
printf("%s\n",b);
strcpy(a,b);
oper++;
}
if(flag) printf("%s is a palindromic number.\n",b);
else printf("Not found in 10 iterations.\n");
return 0;
}