C语言长整数加减乘
长整数加减乘#include#include#include#include
#define OK 1#define ERROR 0#define OVERFLOW -1 #define NULL 0
typedef int Status;
//--链表定义-- typedef struct DuLNode{ Status data; //数据域 struct DuLNode *next,*prior; //指针域}DuLNode,*DuLinkList;
int i;char str[400];
Status turn(Status &data){for(int j=0;i>=0;--i,j++){if(str[i]=='-'&&i==0)break;if(j%4==0)data=str[i]-'0';if(j%4==1)data+=10*(str[i]-'0');if(j%4==2)data+=100*(str[i]-'0');if(j%4==3){data+=1000*(str[i]-'0');--i;if(i==-1||str[i]=='-')return OK;return 0;}if(i==0)return OK;}return OK;}Status Input(Status &data){return turn(data);}Status ListCreate_L(DuLinkList &L,DuLinkList &dl){ DuLNode *r,*q; //r指向尾结点,q指向新开辟结点 L=(DuLNode*)malloc(sizeof(DuLNode)); if(L==NULL)exit(-1); r=L;q=L; for(;;){ q->next=NULL; q->prior=r; r=q; if(Input(q->data)){if(str[0]=='-')q->data=-q->data;break;} if(str[0]=='-')q->data=-q->data; q=(DuLNode*)malloc(sizeof(DuLNode)); r->next=q; if(!q)exit(OVERFLOW); } L->prior=NULL; dl=r; return OK;}void managedata(DuLinkList a,DuLinkList b,Status &data,int &temp){int m=0;if(data<0&&data>-9999){for(;a&&b;a=a->next,b=b->next){if(!a->next&&!b->next){if(a->data>0){if(a->data > -b->data)m=1;}else{if(-a->data < b->data)m=1;}}}if(!a||!b){for(;a;a=a->next)if(a->data>0){m=1;break;}for(;b;b=b->next)if(b->data>0){m=1;break;}}if(m){temp=-1;data=10000+data;}}else if(data>0&&data<=9999){for(;a&&b;a=a->next,b=b->next){if(!a->next&&!b->next){if(a->data>0){if(a->data < -b->data)m=1;}else{if(-a->data > b->data)m=1;}}}if(!a||!b){for(;a;a=a->next)if(a->data<0){m=1;break;}fo