使用scanf,得分:100
//rerite for 3 time
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
/*
2
10011
*/
int a[201],b[201]={},lena,x,n,cnt=0;
char tmp[201]={};
void reverseToB(){
for(int i=0;i<lena;i++)
b[lena-i-1]=a[i];
return ;
}
bool check(){
for(int i=0;i<lena-i-1;i++)
if(a[i]!=a[lena-i-1]) return false;
return true;
}
int main(){
scanf("%d\n",&n);
scanf("%s",tmp);
lena=strlen(tmp);
for(int i=0;i<lena;i++){
if(tmp[i]=='A') a[i]=10;
else if(tmp[i]=='B') a[i]=11;
else if(tmp[i]=='C') a[i]=12;
else if(tmp[i]=='D') a[i]=13;
else if(tmp[i]=='E') a[i]=14;
else if(tmp[i]=='F') a[i]=15;
else a[i]=tmp[i]-'0';
}
while(!check()){
if(cnt>30){
printf("Impossible!");
return 0;
}
reverseToB();
x=0;
for(int i=0;i<lena;i++){
a[i]+=b[i]+x;
x=a[i]/n;
a[i]%=n;
}
if(x) a[lena++]=x;
cnt++;
/*
for(int i=0;i<lena;i++)
printf("%d",a[i]);
printf(" ");
for(int i=0;i<lena;i++)
printf("%d",b[i]);
printf(" %d\n",cnt);
*/
}
printf("STEP=%d",cnt);
return 0;
}
使用cin.getline,得分:25
//rerite for 3 time
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
/*
2
10011
*/
int a[201],b[201]={},lena,x,n,cnt=0;
char tmp[201]={};
void reverseToB(){
for(int i=0;i<lena;i++)
b[lena-i-1]=a[i];
return ;
}
bool check(){
for(int i=0;i<lena-i-1;i++)
if(a[i]!=a[lena-i-1]) return false;
return true;
}
int main(){
scanf("%d\n",&n);
cin.getline(tmp,100);
lena=strlen(tmp);
for(int i=0;i<lena;i++){
if(tmp[i]=='A') a[i]=10;
else if(tmp[i]=='B') a[i]=11;
else if(tmp[i]=='C') a[i]=12;
else if(tmp[i]=='D') a[i]=13;
else if(tmp[i]=='E') a[i]=14;
else if(tmp[i]=='F') a[i]=15;
else a[i]=tmp[i]-'0';
}
while(!check()){
if(cnt>30){
printf("Imposiible!");
return 0;
}
reverseToB();
x=0;
for(int i=0;i<lena;i++){
a[i]+=b[i]+x;
x=a[i]/n;
a[i]%=n;
}
if(x) a[lena++]=x;
cnt++;
// printf("%s %s %d\n",a,b,cnt);
}
printf("STEP=%d",cnt);
return 0;
}
求解!!!