注意:
1、PAT提交不能用gets()函数。
2、如果数字本身就是一个Palindrome number直接输出。
3、数字有1000位,要使用字符数组。
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
bool isPalNum(char C[])
{//判断是否是一个Palindroome number
int len = strlen(C);
for(int i=0; i<len/2; i++)
{
if(C[i] != C[len-i-1])
{
return false;
}
}
return true;
}
int main()
{
char A[1024];
char B[1024];
char C[1024];
int time = 0;
bool flag = false;
scanf("%s",&A);
if(isPalNum(A))
{//判断输入数字是否为Palindroome number
printf("%s is a palindromic number.\n",A);
return 0;
}
while(time<10&&(!flag))
{
//得到B
int len = strlen(A);
for(int i=0; i<len; i++)
{
B[len-i-1] = A[i];
}
B[len] = '\0';
//计算A+B = C
stack<char> result;//将计算结果保存到栈中,再放到数组C里面
int ys = 0;
for(int i=len-1; i>=0; i--)
{
int v = (A[i]-'0')+(B[i]-'0');
v+=ys;
result.push((v%10)+'0');
ys = v/10;
}
if(ys>0)
result.push(ys+'0');
int i=0;
while(!result.empty())
{
C[i++] = result.top();
result.pop();
}
C[i] = '\0';
//判断结果是不是一个Palindroome number
flag = isPalNum(C)?true:false;
printf("%s + %s = %s\n", A, B, C);
time++;
//将C赋值给A
len = strlen(C);
for(int j=0; j<len; j++)
{
A[j] = C[j];
}
A[len] = '\0';
}
if(time >= 10)
{
printf("Not found in 10 iterations.\n");
}
else if(time < 10)
{
printf("%s is a palindromic number.\n",C);
}
return 0;
}