为什么只有 50 分?自己没检查出错因。
求大佬指点!
#include <iostream>
#include <string>
using namespace std ;
void add (int a[], int b[]) ;
void turn (int a[]) ;
void insert () ;
bool check (int a[]) ;
int n, q[1000050], nq[1000050], l, ans ;
string str ;
int main ()
{
cin >> n >> str ;
insert () ;
l = str.size () ;
while (! check (q))
{
turn (q) ;
add (q, nq) ;
ans ++ ;
if (ans > 30)
{
break ;
}
}
if (ans > 30)
{
cout << "Impossible!" ;
}
else
{
cout << "STEP=" << ans ;
}
return 0 ;
}
void add (int a[], int b[])
{
for (int i = 1 ;i <= l ;i ++)
{
a[i] += b[i] ;
a[i + 1] += a[i] / n ;
a[i] %= n ;
}
if (a[l + 1] > 0)
{
l ++ ;
}
}
void turn (int a[])
{
int j = 0 ;
for (int i = l ; i >= 1 ;i --)
{
nq [j ++] = a[i] ;
}
}
bool check (int a[])
{
int l2 = l ;
int i = 1 ;
int j = l ;
while (l2 --)
{
if (l2 < l / 2)
{
break ;
}
if (a[i] != a[j])
{
return 0 ;
}
i ++ ;
j -- ;
}
return 1 ;
}
void insert ()
{
int j = 0 ;
for (int i = str.size () - 1 ; i >= 0 ;i --)
{
if (str[i] >= '0' && str[i] <= '9')
{
q[j ++] = str[i] - '0' ;
}
else
{
q[j ++] = str[i] - 'A' + 10 ;
}
}
}