两题相似度99%,回文过程其实就是翻转字符串,改下输入输出即可
PAT1136 A Delayed Palindrome
首先将该数字逆转,再将逆转数与该数相加,如果和还不是一个回文数,就重复这个逆转再相加的操作,直到一个回文数出现。
如果一个非回文数可以变出回文数,就称这个数为延迟的回文数。
给定任意一个正整数,本题要求你找到其变出的那个回文数。
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
string gao(string s){
cout<<s<<" + ";
string t=s;
reverse(t.begin(),t.end());
cout<<t<<" = ";
string ans=s;
int last=0;
for(int i=s.length()-1;i>=0;i--){
int sum=s[i]-'0'+ t[i]-'0'+last;
ans[i]=(sum%10)+'0';
last=sum/10;
}
if(last) ans="1"+ans;
return ans;
}
bool check(string s){
string t=s;
reverse(t.begin(),t.end());
if(t!=s) return false;
cout<<s<<" is a palindromic number."<<endl;
return true;
}
string s;
int main(){
cin>>s;
int t=10;
int flag=0;
if(check(s)) return 0;
while(t--){
s=gao(s);
cout<<s<<endl;
if(check(s)){
flag=1;
break;
}
}
if(!flag) cout<<"Not found in 10 iterations."<<endl;
}
1024 Palindromic Number
有一处坑点(虽然题目前几句就说了,但是我还是没注意): 如果输入是一位数,那么一定是回文数
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
string gao(string s){
string t=s;
reverse(t.begin(),t.end());
string ans=s;
int last=0;
for(int i=s.length()-1;i>=0;i--){
int sum=s[i]-'0'+ t[i]-'0'+last;
ans[i]=(sum%10)+'0';
last=sum/10;
}
if(last) ans="1"+ans;
return ans;
}
bool check(string s){
string t=s;
reverse(t.begin(),t.end());
if(t!=s) return false;
return true;
}
string s;
int k;
int main(){
cin>>s>>k;
if(check(s)||s.length()==1){
cout<<s<<endl<<0<<endl;
return 0;
}
rep(i,0,k){
s=gao(s);
if(check(s)){
cout<<s<<endl<<i+1<<endl;
return 0;
}
}
cout<<s<<endl<<k<<endl;
}