这道题主要是考大整数的加法,乙级回文数的判断。
由于输入的数可能会大于整型,所以用数组来存储每一位数。
思路:首先判断输入的数是否是回文数,是则输出,不是则进行大整数加法,再判断得到的数是否是回文数。
#include <iostream>
#include <cstring>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
int flag=1;
bool judge(int A[],int len){
int k=0,i,flag=1;
int j=len-1;
while(k<=j){
if(A[k++]!=A[j--]){
flag=0;
break;
}
}
if(flag){
for(i=0;i<len;i++){
printf("%d",A[i]);
}
printf(" is a palindromic number.");
return true;
}
return false;
}
int main(){
int a[1111],b[1111],c[1111],i;
string str;
cin>>str;
int lenA=str.length();
int lenC=lenA;
for(i=0;i<lenA;i++){
a[i]=str[i]-'0';
}
if(judge(a,lenA)){ //判断输入是否是回文数
return 0;
}
for(int time=0;time<10;time++){
for(i=0;i<lenA;i++){
b[i]=a[i];
}
reverse(b,b+lenA);
memset(c,0,sizeof(c));
for(i=0;i<lenA;i++){ //大整数加法
c[i]=c[i]+a[i]+b[i];
c[i+1]=c[i]/10;
c[i]=c[i]%10;
}
if(c[lenA]>0){
lenC++;
}
for(i=0;i<lenA;i++){
printf("%d",a[i]);
}
printf(" + ");
for(i=0;i<lenA;i++){
printf("%d",b[i]);
}
printf(" = ");
for(i=lenC-1;i>=0;i--){
printf("%d",c[i]);
}
printf("\n");
if(judge(c,lenC)){
return 0;
}else{
flag=0;
reverse(c,c+lenC);
for(i=0;i<lenC;i++){
a[i]=c[i];
}
lenA=lenC;
}
}
if(flag==0)
printf("Not found in 10 iterations.");
return 0;
}