点击查看代码
#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比普通数组实在是太有优越性了,可以轻易判断大小,添加元素