本文主要是介绍PAT 1079 延迟的回文数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:请点击
分析:
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赋值给sumwhile(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赋值给n1cnt++;}if(isPalNum(sum)) {Print(sum);cout<<" is a palindromic number."<<endl;}else cout<<"Not found in 10 iterations."<<endl;return 0;
}
这篇关于PAT 1079 延迟的回文数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!