解题思路:核心思想就是数组进行加法运算

注意事项:

参考代码:

#include<stdio.h>
#include<string.h>
int step=0;
int n;
int judged(int x[],int m)//判断是不是回文数
{
    int i;
    for(i=0;i<m/2;i++)
    {
        if(x[i]!=x[m-1-i])
        return 0;
    }
    return 1;
}
void add(int a[],int str)//数组相加。
{
    int b[100]={0};
    int i,x;
    for(i=0;i<str;i++)//核心代码
    {
        b[i]=a[i]+a[str-1-i];
    }
    for(i=0;i<str;i++)//核心代码
    {
        x=b[i];
        b[i]=x%n;
        b[i+1]+=x/n;//核心代码
    }
    if(b[str]!=0)//判断最后一个是不是进位
    str++;
    step++;
    if(step>30)
    {
        printf("Impossible!\n");
        return ;
    }
    else {
        if(judged(b,str)==1)
        {
            printf("STEP=%d\n",step);
            return ;
        }
        else add(b,str);
    }
     
}
int main()
{
    char a[100];
    int b[100]={0};
    int i,str;
    scanf("%d",&n);
    getchar();
    scanf("%s",a);
    str=strlen(a);
    for(i=0;i<str;i++)
    {
        if(a[i]<='9'&&a[i]>='0')
        {
            b[str-1-i]=a[i]-'0';
        }
        else if(a[i]>='a'&&a[i]<='f')
        {
            b[str-1-i]=a[i]-'a'+10;
        }
        else if(a[i]>='A'&&a[i]<='F')
        {
            b[str-1-i]=a[i]-'A'+10;
        }
    }
    add(b,str);
    return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »