aa9527 @ 2022-07-12 16:34:29
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
int fun1(int num[]) //判断位数
{
for(int i=99;i>=0;i--)
{
if(num[i]!=0)
return i+1;
}
}
void fun2(int num[],int *num_) //数组元素顺序颠倒
{
for(int i=0;i<fun1(num);i++)
{
num_[i]=num[fun1(num)-i-1];
}
}
bool fun3(int num[]) //判断回文
{
for(int i=0;i<fun1(num)/2;i++)
{
if(num[i]!=num[fun1(num)-i-1])
return false;
}
return true;
}
int main()
{
int N=0;
char str[101]={0};
cin>>N;
cin.getline(str,101);
cin.getline(str,101);
int num[101]={0};
for(int i=strlen(str)-1;i>=0;i--)//字符串换成整型数组,逆向存储,即num[0]存最低位
{
if(str[i]>='0' && str[i]<='9')
num[i]=str[i]-'0';
else
num[i]=str[i]-'A'+10;
}
for(int i=1;i<=30;i++)
{
int num_[101]={0};
fun2(num,num_); //数组元素顺序颠倒
for(int i=0;i<fun1(num);i++) //数组相加
{
num[i]=num[i]+num_[i];
if(num[i]>=N)
{
num[i+1]++;
num[i]=num[i]%N;
}
}
if(fun3(num)==1) //判断回文
{
cout<<"STEP="<<i;
return 0;
}
}
cout<<"Impossible!";
return 0;
}
by Dreamer_002 @ 2022-07-20 15:32:43
有BUG:
1.16进制的判断没有写小写情况(因为题目中没有给出大小写)。
2.没有输出"STEP=0"。
3.main函数里多次定义了num数组。
by Dreamer_002 @ 2022-07-20 15:40:57
AC代码:
#include<cstdio>
#include<cstring>
const int N = 1005;
int c[N];
int b[N];
int a[N];
int step;
int n;
char k[N];
int ok;
int main()
{
scanf("%d%s",&n,k);
for(int i=1;i<=strlen(k);i++)
{
if((k[i-1]>='a' && k[i-1]<='z'))
{
a[0]++;
a[strlen(k)-i+1]=k[i-1]-'a'+10;
}
else if((k[i-1]>='A' && k[i-1]<='Z'))
{
a[0]++;
a[strlen(k)-i+1]=k[i-1]-'A'+10;
}
else
{
a[0]++;
a[strlen(k)-i+1]=k[i-1]-'0';
}
}
ok=1;
for(int i=1;i<=a[0]/2;i++)
{
if(a[i]!=a[a[0]-i+1])
{
ok=0;
break;
}
}
if(ok==1)
{
printf("STEP=0\n");
return 0;
}
while(step<=30)
{
step++;
memset(b,0,sizeof(b));
for(int i=1;i<=a[0];i++)
{
b[0]++;
b[i]=a[a[0]-i+1];
}
memset(c,0,sizeof(c));
c[0]=a[0];
for(int i=1;i<=a[0];i++)
{
c[i]+=a[i]+b[i];
c[i+1]=c[i]/n;
c[i]=c[i]%n;
}
if(c[c[0]+1]!=0)
{
c[0]++;
}
ok=1;
for(int i=1;i<=c[0]/2;i++)
{
if(c[i]!=c[c[0]-i+1])
{
ok=0;
break;
}
}
if(ok==1)
{
break;
}
for(int i=1;i<=c[0];i++)
{
a[i]=c[i];
}
a[0]=c[0];
}
if(step>30)
{
printf("Impossible!\n");
}
else
{
printf("STEP=%d\n",step);
}
return 0;
}