hichens


私信TA

用户名:he1559576917

访问量:7382

签 名:

he1559576917

等  级
排  名 2043
经  验 2489
参赛次数 0
文章发表 14
年  龄 0
在职情况 学生
学  校 CQUPT
专  业

  自我简介:

代码千万条,注释第一条。 注释不清楚,亲人两行泪。

TA的其他文章

解题思路:  1,考虑到十进制以上,用字符串数组储存所输入的数字。

                2,编写change函数将字符串数组的元素全部转化成数字,再储存在全局数组a中;

                3,用len 记录数组a的长度,便于访问;

                4,add函数用于逆转得到一个新数字与原来的数字相加,得到的新数字储存在a中;

                5,fun函数用于判断回文数;

                6,主函数用while循环判断               


注意事项:len是会变的;最后一次k可以为1

参考代码:

#include<stdio.h>

#include<string.h>

int len;//记录数组a长度

int a[1000];

void change(char b[])//将数组元素全部化为数字并储存在a中

{

    int i = 0;

    while(b[i])

    {

        if(b[i]>='A'&&b[i] <= 'F')//10进制以上的转化

            a[i] = b[i] - 'A' + 10;

        else

            a[i] = b[i] - '0';

        ++i;

    }

    len = i;//记录最初数组a的长度

    //printf("%d\n\n",len);

}

void add(int b[],int m)//将数组逆序存放后相加并储存在数组b中

{

    int i,b1[1000],k=0;

    for(i = 0;i < len;++i)

        b1[len-1-i] = b[i];

    

    for(i = 0;i < len;++i)

    {

        b[i] = b1[i]+b[i]+k;//各个位相加,k为上一位的溢出值

        k = b[i]/m;//有溢出则k = 1;else k = 0;

        b[i] = b[i]%m;//确保b[i]没有溢出

    }

    if(k>0)//如果k>0,则下一位为k(也就是1)

    b[len++] = k;

    //printf("%d\n",len);

}

int fun(int b[])//判断回文数

{

    int i;

    for(i = 0;i < len/2;++i)

        if(b[i]!=b[len-1-i])

        return 0;

    return 1;

}

int main()

{

    int n,t = 0;

    char m[1000];

    scanf("%d",&n);scanf("%s",m);

    change(m);

    while(!fun(a)&&t<=30){

        add(a,n);//不满足条件则调用add函数得到新的数字

        ++t;

    }

    if(t<=30) printf("STEP=%d",t);

    else printf("Impossible!");

}


 

0.0分

0 人评分

  评论区

  • «
  • »