PAT1136 A Delayed Palindrome && 1024 Palindromic Number 回文数(字符串模拟)

两题相似度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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值