自测正常,提交只过了例4
查看原帖
自测正常,提交只过了例4
1570969
beginner334楼主2024/11/30 15:55

如题,自测这里面的五个数据都过了,但是提交只过#4 这里有五个测试数据

#include <stdio.h>
#include <stdlib.h>
typedef struct _huiwenshu{
    int a;
    int b;
    struct _huiwenshu *shangwei;
    struct _huiwenshu *xiawei;
} intshu;//记录每一位的数
typedef struct _shuliebiao{
    intshu *head;
    intshu *tail;
} qh;//一个数位集合的表
void hui(qh *p,int e)
{
    int w;
    intshu *n,*l;
    for(w=0,n=p->tail,l=p->head;;n=n->shangwei,l=l->xiawei)
    {
        if(n==l)
        {
            w=n->a+l->a,n->a=w%e,w/=e;
            n->shangwei->b+=w;
            break;
        }
        w=n->a+l->a,n->a=l->a=w%e,w/=e;
        n->shangwei->b+=w;
        if(w&&l->shangwei==NULL)
        {
            intshu *m=(intshu*)malloc(sizeof(intshu));
            m->b=0,m->a=w,m->shangwei=NULL,m->xiawei=l;
            p->head=p->head->shangwei=m;
        }
        else if(w) l->shangwei->b=w;
        if(n->shangwei==l) break;
    }//将两数表按照e进制相加
    n=p->tail;
    while(n!=NULL){
        w=n->a+n->b;
        if(w>e-1)
        {
            w%=e;
            if(n->shangwei==NULL)
            {
                intshu *m=(intshu*)malloc(sizeof(intshu));
                m->b=m->a=0,m->shangwei=NULL,m->xiawei=n;
                p->head=p->head->shangwei=m;
            }
            n->shangwei->b++;
        }
        n->a=w;
        n->b=0;
        n=n->shangwei;
    }
}
int judge(qh *p)
{
    intshu *c=p->head,*b=p->tail;
    for(;c->a==b->a&&b!=c&&c->xiawei!=b;c=c->xiawei,b=b->shangwei){}
    if(c==b||c->a==b->a) return 0;
    else return 1;
}//判断是否为回文数
int main()
{
    int i,e,step=0;
    char a[100];
    qh biao;
    biao.head=biao.tail=NULL;
    scanf("%d ",&e);
    fgets(a,100,stdin);
    if(e==16)
        for(i=0;a[i]!='\n';i++)
            if(a[i]>'9')
                a[i]='9'+'A'-a[i]+1;
    for(i=0;a[i]!='\n';i++)
    {
        intshu *m=(intshu*)malloc(sizeof(intshu));
        m->b=0,m->a=a[i]-'0',m->xiawei=NULL;
        if(biao.head==NULL) biao.head=biao.tail=m,m->shangwei=NULL;
        else m->shangwei=biao.tail,biao.tail->xiawei=m,biao.tail=m;
    }//收数进表
    for(;judge(&biao)&&step<31;step++)
        hui(&biao,e);
    if(step<31) printf("STEP=%d",step);
    else printf("Impossible!");
    intshu *w,*r=biao.head;
    while(r!=NULL)
    {
        w=r,r=r->xiawei;
        free(w);
    }
    return 0;
}
2024/11/30 15:55
加载中...