题目链接:请点击
分析:
1 题目给出“不超过1000位的正整数,”显然要用大数加法那样处理,即对string型的str倒序存储于int型的数组中,然后逐位相加且判断是否有进位。
AC代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
bool isPalNum(vector<int> n){//判断是否为回文数
for(int i=0;i<n.size()/2;i++){
if(n[i]!=n[n.size()-i-1]) return false;
}
return true;
}
void Print(vector<int> num){//输出函数
reverse(num.begin(),num.end());
int i=0;
while(num[i]==0) i++;//跳过前导0
for(i;i<num.size();i++) cout<<num[i];
}
int main(){
vector<int> n1,n2,sum;
string str;
cin>>str;
for(int i=0;i<str.length();i++) n1.push_back(str[str.length()-i-1]-'0');
int cnt=0;
sum.assign(n1.begin(),n1.begin()+n1.size());//将n1赋值给sum
while(cnt<10){
if(isPalNum(sum)) {Print(sum);cout<<" is a palindromic number."<<endl; return 0;}
n2.assign(n1.begin(),n1.begin()+n1.size());//将n1赋值给n2
reverse(n2.begin(),n2.end());//反转n2
Print(n1);cout<<" + ";Print(n2);cout<<" = ";
int flag=0;
for(int i=0;i<n1.size();i++){
sum[i]=n1[i]+n2[i];
if(flag){//有来自上一位的进位
sum[i]++;
flag=0;
}
if(sum[i]>=10){//本位和>=10 置flag=1表明本位有进位
sum[i]-=10;
flag=1;
}
}
if(flag) sum.push_back(1);//有向最高位的进位 最高位置1
Print(sum);cout<<endl;
n1.assign(sum.begin(),sum.begin()+sum.size());//将sum赋值给n1
cnt++;
}
if(isPalNum(sum)) {Print(sum);cout<<" is a palindromic number."<<endl;}
else cout<<"Not found in 10 iterations."<<endl;
return 0;
}