R249253247 回文数

点击查看代码
#include<bits/stdc++.h>

using namespace std;

const int N=140;
int n,ans;
vector<int> A,rA;
string s;
//读入函数
void init()
{
    //初始化读入数组,要区分数字大于10的情况
    for(int i=s.size()-1;i>=0;i--){
        if(s[i]>='0'&&s[i]<='9')  A.push_back(s[i]-'0');
        else A.push_back(s[i]-'A'+10);
    }   
}
//高精加函数
vector<int> add(vector<int>& A,vector<int>& B )
{
    if(A.size()<B.size()) return add(B,A);

    vector<int> C;
    int t=0;
    //补位设置在循环条件上
    for(int i=0;i<A.size()||t;i++){
        t+=A[i];
        if(i<B.size()) t+=B[i];//缓存位
        C.push_back(t%n);//当前位
        t=t/n;//进位
    }
    return C;
}
//反转函数
vector<int> turn(vector<int>& A)
{
    vector<int> C;
    for(int i=A.size()-1;i>=0;i--) C.push_back(A[i]);

    return C;
}
//判断回文数函数

bool right(vector<int> &A)
{
    int l=0,r=A.size()-1;
    while(l<r){
        if(A[l]!=A[r]) return false;
        l++;
        r--;
    }
    
    return true;
}

int main()
{
    cin>>n>>s;
    init();
    while(!right(A)){
        rA=turn(A);
        A=add(A,rA);
        ans++;
        if(ans>30) break;
    }
    if(ans>30) printf("Impossible!");
    else printf("STEP=%d", ans);

    return 0;
}
优雅的代码,核心在于把函数都一一实现,只要所有函数都实现好了就可以轻易把这道题做出来 并且vector比普通数组实在是太有优越性了,可以轻易判断大小,添加元素
posted @ 2025-11-24 09:26  AnoSky  阅读(3)  评论(0)    收藏  举报