解题思路:

  1. 定义多个函数,分别处理遇到的问题,用户输入的位数,数字反向相加,判断同文数。

  2. 用数组去接收用户输入的第二个数会让后面的计算起来简单很多。


  1. 参考代码:

#include<stdio.h>
#include<math.h>
#include <string.h>
#include <stdlib.h>
int stod(char s[],int a[]);
int plus(int a[],int n,int m);
int check(int a[],int n);

int p;
char s[1000];
int c[1000];

main()
{
    int n,i;
    scanf("%d",&p);                 //接收进制
    scanf("%s",s);                  //用数组接收用户输入的第一个数
    n=stod(s,c);                    //判断用户输入了几位数,并传给n
    for(i=0;i<30;i++)
    {
       n=plus(c,n,p);               //相加
       if(check(c,n)==1)            //判断是否为回文数
         {
            printf("STEP=%d\n",i+1);
            break;
         }
    }
    if(i>=30)
      printf("Impossible!\n");
}

int  stod(char s[],int a[])                //统计位数
{
     int i;     //判断用户输入的为几位数的数字
     for(i=0;s[i]!='\0';i++)
        if(s[i]>='A'&&s[i]<='F')          //10到16进制数
           a[i]=10+s[i]-'A';              //给数组c赋值
        else                              //2到10进制数
           a[i]=s[i]-'0';
     return i;  //返回位数给n
}

int plus(int a[],int n,int m)   //计算a=a+a反
{
     int *b,i,j,k;
     b=(int *)malloc(sizeof(int)*1001);//开辟空间
     for(i=0;i<n;i++)
        b[n-1-i]=a[i];  //把a反过来给b
     k=0;
     for(i=0;i<n;i++)
     {
        a[i]=a[i]+b[i]+k;
        k=a[i]/m;
        a[i]=a[i]%m;
     }
     if(k>0)
       a[n++]=k;
     free(b);
     return n;
}

int check(int a[],int n)       //判断a是否是回文
{
    int i,j;
    i=0;
    j=n-1;
    while(i<j&&a[i]==a[j])
    {
       i++;
       j--;
    }
    return i>=j;
}

看看大家还有什么不懂的请在下方评论区留言

点赞(15)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 7 条评论

RioTian 5年前 回复TA
谢谢小方了,思路超清晰呢,搞懂好多了
dream 5年前 回复TA
@杭林生 返回的还是位数,若是最高位有进位,位数会加1
杭林生 6年前 回复TA
int check(int a[],int n)       //判断a是否是回文             大佬这个返回的值是什么
杭林生 6年前 回复TA
int plus(int a[],int n,int m)   这个函数 返回的是 a+a相加之后的值吗
Langzihao. 7年前 回复TA
@Langzihao. @1104986125 我可是说的大实话呢~
Mister-小方 7年前 回复TA
@Langzihao. 这么讲我就有点受宠若惊了
Langzihao. 7年前 回复TA
思路很清晰,代码也很整洁,很棒!我一下就看懂了,谢谢小方。我要向你学习