2 条题解
-
0齐硕 LV 10 @ 2022-08-09 19:18:12
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 1010
using namespace std;
int a[MAXN],n,step,b[MAXN],c[MAXN];
char p,s[MAXN];inline bool pd()
{
if(a[0]%2==0)
{
int i=1,j=a[0];
while(i<=j)
{
if(a[i]!=a[j])
return false;
i++;j--;
}
return true;
}
else
{
int i=1,j=a[0];
while(i!=j)
{
if(a[i]!=a[j])
return false;
i++;j--;
}
return true;
}
}
inline void pluss()
{
b[0]=a[0];
for(int i=a[0];i>=1;i--)
b[i]=a[a[0]-i+1];
c[0]=++a[0];
for(int i=1;i<=a[0];i++)
{
c[i]+=a[i]+b[i];
if(c[i]>=n)
{
c[i+1]+=c[i]/n;
c[i]%=n;
}
}
while(c[0]>0&&!c[c[0]])
c[0]--;
for(int i=0;i<=c[0];i++)
a[i]=c[i];
for(int i=c[0];i>=0;i--)
b[i]=c[i]=0;
}
int main() {
cin>>n;
cin>>s;
int len=strlen(s);
for(int i=len-1;i>=0;i--)
{
if(s[i]>='0'&&s[i]<='9')
a[++a[0]]=s[i]-'0';
else if(s[i]=='A')
a[++a[0]]=10;
else if(s[i]=='B')
a[++a[0]]=11;
else if(s[i]=='C')
a[++a[0]]=12;
else if(s[i]=='D')
a[++a[0]]=13;
else if(s[i]=='E')
a[++a[0]]=14;
else if(s[i]=='F')
a[++a[0]]=15;
}
while(!pd())
{
if(step>30)
{
printf("Impossible!\n");
return 0;
}
pluss();
step++;
}
cout<<"STEP="<<step;
return 0;
} -
02022-08-04 15:31:26@
/*
先处理进制数
然后用高精加法来加每一次的数 (因为有16进制 T_T)
然后在判断是不是回文数
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 1010
using namespace std;
int a[MAXN],n,step,b[MAXN],c[MAXN];
char p,s[MAXN];inline bool pd() {
if(a[0]%2==0) {
int i=1,j=a[0];
while(i<=j) {
if(a[i]!=a[j]) return false;
i++;j--;
}
return true;
}
else {
int i=1,j=a[0];
while(i!=j) {
if(a[i]!=a[j]) return false;
i++;j--;
}
return true;
}
}
inline void pluss() {
b[0]=a[0];
for(int i=a[0];i>=1;i--) b[i]=a[a[0]-i+1];
c[0]=++a[0];
for(int i=1;i<=a[0];i++) {
c[i]+=a[i]+b[i];
if(c[i]>=n) {
c[i+1]+=c[i]/n;
c[i]%=n;
}
}
while(c[0]>0&&!c[c[0]]) c[0]--;
for(int i=0;i<=c[0];i++) a[i]=c[i];
for(int i=c[0];i>=0;i--) b[i]=c[i]=0;
}
int main() {
scanf("%d",&n);
cin>>s;
int len=strlen(s);
for(int i=len-1;i>=0;i--) {
if(s[i]>='0'&&s[i]<='9') a[++a[0]]=s[i]-'0';
else if(s[i]=='A') a[++a[0]]=10;
else if(s[i]=='B') a[++a[0]]=11;
else if(s[i]=='C') a[++a[0]]=12;
else if(s[i]=='D') a[++a[0]]=13;
else if(s[i]=='E') a[++a[0]]=14;
else if(s[i]=='F') a[++a[0]]=15;
}
while(!pd()) {
if(step>30) {
printf("Impossible!\n");
return 0;
}
pluss();
step++;
}
printf("STEP=%d\n",step);
return 0;
}
- 1