bacmive


私信TA

用户名:bacmive

访问量:19730

签 名:

努力、奋斗

等  级
排  名 299
经  验 5601
参赛次数 0
文章发表 36
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

参考代码:

#include <stdio.h>
#include <string.h>


int ishw(char *m)
{
    int len=strlen(m);
    int i=0,j=len-1,flag=1;
    while(i<=j)
    {
        if(m[i]!=m[j])
        {
            flag=0;break;
        }
        i++;
        j--;
    }
    return flag;
}
void getReverse(char *m,char *re_m)
{

    int len=strlen(m);
    int i=len-1,j=0;
    for(;i>=0;i--,j++)
    {
        re_m[j]=m[i];
    }
    re_m[j]='\0';
}

void addToM(int n,char *m,char *re_m)
{
    int i=0,j;
    int a[20];
    memset(a,0,sizeof(a));

    while(m[i]!='\0')
    {
        if(m[i]>='A'&&m[i]<='Z') a[i]+=(int)((m[i]-'A')+10);
        else a[i]+=(m[i]-'0');
        if(re_m[i]>='A'&&re_m[i]<='Z') a[i]+=(int)((re_m[i]-'A')+10);
        else a[i]+=(re_m[i]-'0');
        i++;
    }

    j=0;
    while(j<i)
    {
        a[j+1]+=(a[j]/n);

        if(n<=10)
            {m[j]=a[j]%n+'0';}
        else{
            if((a[j]%n)>=10) m[j]='A'+(a[j]%n-10);
            else m[j]=a[j]%n+'0';
        }
        j++;
    }

    if(a[j]>=10) {m[j]=(a[j]-10)+'A';m[j+1]='\0';}
    else if(a[j]>0) {m[j]=a[j]+'0';m[j+1]='\0';}
    else m[j]='\0';

}

int main()
{
    int n,cnt=0;
    char m[100],re_m[100];
    scanf("%d",&n);
    scanf("%s",m);
    while(!ishw(m)&&cnt<=30)
    {
        getReverse(m,re_m);
        addToM(n,m,re_m);
        cnt++;
    }
    if(!ishw(m)) printf("Impossible");
    else printf("STEP=%d",cnt);

    return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »