实现两个长整数相加:要求用链表(单链表或双向链表)实现两个任意位数的整数相加。例如,为存储100位的整数可以建立有100

1个回答

  • 根据你的想法我写了个 一位一个结点的 只是正长整数相加 负数没有考虑 你可以自己完善下!

    代码如下:

    #include

    #include

    #define X 101 //100位加1位进位

    typedef struct NODE//单链表

    {

    int data;

    struct NODE *next;

    }List;

    List *Create(char *n)//加数输入到链表

    {

    int i,ws=0,num=0;

    char *x;

    List *head,*p,*q;

    x=n;

    while(*x++) ws++;

    head=p=(List *)malloc(sizeof(List));

    //printf("%s",n);

    for(i=ws-1;i>=0;i--)

    {

    q=(List *)malloc(sizeof(List));

    q->data=n[i]-'0';

    if(num==0)

    {

    p=q;

    head=p;

    }

    else

    p->next=q;

    p=q;

    num++;

    }

    for(i=0;idata=0;

    p->next=q;

    p=q;

    }

    q=(List *)malloc(sizeof(List));

    q->data=0;

    p->next=q;

    p=q;p->next=NULL;

    return head;

    }

    List *SUM(List *p,List *q)//求和

    {

    int jw=0,tem=0;//进位

    List *head,*y;

    head=(List *)malloc(sizeof(List));

    head=NULL;

    while(p!=NULL)

    {

    tem=p->data+q->data+jw;

    if(tem>=10)

    jw=1;

    else

    jw=0;

    tem=tem%10;

    y=(List *)malloc(sizeof(List));

    y->data=tem;

    y->next=head;

    head=y;

    p=p->next;q=q->next;

    }

    return head;

    }

    void Print(List *head)//输出结果

    {

    int num=0;

    List *p;

    p=head;

    while(p!=NULL)

    {

    if(p->data!=0)num=1;

    if(num==1)

    {

    printf("%d",p->data);

    }

    p=p->next;

    }

    }

    main()

    {

    List *js1,*js2,*sum1;

    char *p="654456793422",*q="4567898";

    js1=Create(p);//加数输入到链表

    js2=Create(q);//加数输入到链表

    printf("加数1:%s",p);

    printf("");

    printf("加数2:%s",q);

    sum1=SUM(js1,js2);//求和

    printf("");

    printf("求和:");

    Print(sum1);

    printf("");

    }