主题:[讨论]关于有链表定义大整数,然后编译大整数的加减乘法3个函数,请教下!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Cell2 *big_int;
struct Cell2{big_int suiv;[color=0000FF]//指向下一个[/color]
Elt el;
big_int pre;[color=0000FF]//指向前一个[/color]
};
[color=0000FF]//定义了个双向链表[/color]
big_int creer(){return NULL;}
int long(big_int L){
big_int p;
int i=0;
p=L;
while(p!=NULL){
i++;
p=p->suiv;}
return i;
}
[color=0000FF]//链表长度[/color]
big_int add(Elt x,int pos, big_int L)
{big_int p,q,n; int i;
n=(big_int)malloc(sizeof(struct Cell2));
n->el=x; p=q=L; i=1;
while (p!=NULL&&i<pos){q=p; p=p->suiv;}
if(i==1){n->suiv=L; n->pre=NULL;
if(L!=NULL)L->pre=n; return n;}
else if(p!=NULL){n->suiv=p; n->pre=p->pre;
q->suiv=n; p-->pre=n; return L;}
else {n->suiv=NULL; n->pre=q; q->suiv=n;}
return L;
}
[color=0000FF]//在链表L中第pos位置加个元素x[/color]
[color=FF0000]//加元素这个函数是不是就用在两个要加的链表里呢?
怎样把一串整数依次一个一个输入到链表里?[/color]
big_int addition(big_int L1,big_int L2)
{big_int t,p1,p2,p3,L3;
if(long(L1)<=long(L2)L3=L2;
else L3=L1;
p3=(big_int)malloc(sizeof(struct Cell2));
t=p3;p3->suiv=L3;
while(L3!=NULL){p3=L3->suiv;}
[color=FF0000]//(这里没写完)要让链表从最后个位置开始计算加法,需要特地写个(最后元素的函数么),还是可以当不等于null,这样调到最后个元素呢?[/color]
while(L1!=NULL){p1=L1->suiv;}
while(L2!=NULL){p2=L2->suiv;}
while(p1->pre!=NULL||p2->pre!=NULL)
{if(((p1->el+p2->el)<=9)&&((p1->suiv->el+p2->suiv->el)<=9))
p3->el=(p1->el+p2->el);
else if(((p1->el+p2->el)<=8)&&((p1->suiv->el+p2->suiv->el)>9))p3->el=((p1->el+p2->el)+1);
else p3->el=((p1->el+p2->el)+1-10);
return L3->el=p3->el;
}
}
[color=FF0000]//关于加法进位上面这个可以表示么?有什么要点没?[/color]
[color=0000FF]//目前只写到这里,写得比较糟糕,大家耐心看看,指导下^^[/color]
#include <string.h>
#include <stdlib.h>
typedef struct Cell2 *big_int;
struct Cell2{big_int suiv;[color=0000FF]//指向下一个[/color]
Elt el;
big_int pre;[color=0000FF]//指向前一个[/color]
};
[color=0000FF]//定义了个双向链表[/color]
big_int creer(){return NULL;}
int long(big_int L){
big_int p;
int i=0;
p=L;
while(p!=NULL){
i++;
p=p->suiv;}
return i;
}
[color=0000FF]//链表长度[/color]
big_int add(Elt x,int pos, big_int L)
{big_int p,q,n; int i;
n=(big_int)malloc(sizeof(struct Cell2));
n->el=x; p=q=L; i=1;
while (p!=NULL&&i<pos){q=p; p=p->suiv;}
if(i==1){n->suiv=L; n->pre=NULL;
if(L!=NULL)L->pre=n; return n;}
else if(p!=NULL){n->suiv=p; n->pre=p->pre;
q->suiv=n; p-->pre=n; return L;}
else {n->suiv=NULL; n->pre=q; q->suiv=n;}
return L;
}
[color=0000FF]//在链表L中第pos位置加个元素x[/color]
[color=FF0000]//加元素这个函数是不是就用在两个要加的链表里呢?
怎样把一串整数依次一个一个输入到链表里?[/color]
big_int addition(big_int L1,big_int L2)
{big_int t,p1,p2,p3,L3;
if(long(L1)<=long(L2)L3=L2;
else L3=L1;
p3=(big_int)malloc(sizeof(struct Cell2));
t=p3;p3->suiv=L3;
while(L3!=NULL){p3=L3->suiv;}
[color=FF0000]//(这里没写完)要让链表从最后个位置开始计算加法,需要特地写个(最后元素的函数么),还是可以当不等于null,这样调到最后个元素呢?[/color]
while(L1!=NULL){p1=L1->suiv;}
while(L2!=NULL){p2=L2->suiv;}
while(p1->pre!=NULL||p2->pre!=NULL)
{if(((p1->el+p2->el)<=9)&&((p1->suiv->el+p2->suiv->el)<=9))
p3->el=(p1->el+p2->el);
else if(((p1->el+p2->el)<=8)&&((p1->suiv->el+p2->suiv->el)>9))p3->el=((p1->el+p2->el)+1);
else p3->el=((p1->el+p2->el)+1-10);
return L3->el=p3->el;
}
}
[color=FF0000]//关于加法进位上面这个可以表示么?有什么要点没?[/color]
[color=0000FF]//目前只写到这里,写得比较糟糕,大家耐心看看,指导下^^[/color]