C语言 长整数加减乘
//--链表定义--
typedef struct DuLNode{
Status data; //数据域
struct DuLNode *next,*prior; //指针域
}DuLNode,*DuLinkList;
int i;
char str[400];
Status turn(Status &data){
}
}
Status read(DuLinkList &L,DuLinkList &dl){
i=0;
gets(str);
if(str[i]=='-')i++;
for(;str[i]!='\0';i++){
if(str[i]<'0'||str[i]>'9'){
printf("输入错误!,请重新输入\n");
managedata(a,b,data,temp);
if(!a&&!b&&!temp)return OK;
return 0;
}
if(a){data=a->data+temp;a=a->next;temp=0;managedata(a,b,data,temp);if(!a)return OK;return 0;}
}
if(!curPtr->prior){printf("0");}
curPtr=curPtr->prior;
}
while(curPtr){
Output(curPtr->data);
curPtr=curPtr->prior;
}
}
void main();
void write(DuLinkList L);
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){
q=(DuLNode*)malloc(sizeof(DuLNode));
r->next=q;
if(!q)exit(OVERFLOW);
}
L->prior=NULL;
dl=r;
return OK;
}
Status multiplymanage(DuLinkList a,int y,Status &data,int &temp){
void addmain(){
DuLinkList a[2],b[2],c[2];
printf("\t\t\t\t长整数加法\n\n");
printf("请输入被加数:\n");
read(a[0],a[1]);
printf("输入的被加数是:\n");
ListPrint_L(a[1]);
printf("\n");
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)
printf("请输入加数:\n");
read(b[0],b[1]);
printf("输入的加数是:\n");
ListPrint_L(b[1]);
printf("\n计算结果是:");
printf("\n");
for(int j=0;j<80;j++)
printf("\3");
DuListCreate_L(a[0],b[0],c[0],c[1]);
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指向新开辟结点
read (L,dl);
}
}
i--;
if(str[i]>='0'&&str[i]<='9')
ListCreate_L(L,dl);
else {
printf("输入错误!,请重新输入\n");
read (L,dl);
}
return OK;
}
void Output(Status data){
printf(",",data);
for(;symble[3];symble[3]=symble[3]->next){
symble[3]->data=symble[3]->data+symble[0]->data+temp;
temp=0;
symble[0]=symble[0]->next;
if(symble[3]->data>9999||symble[3]->data<-9999){
temp=-1;
data=data%10000;
}
}
Status add(DuLinkList &a,DuLinkList &b,Status &data,int &temp){
if(a&&b){
data=a->data+b->data+temp;
temp=0;
a=a->next;b=b->next;
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){
DuLNode *r,*q;
int temp=0;//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(add(a,b,q->data,temp))break;
DuLinkList symble[4];
int temp=0;
multiply(a,b->data,L,dl);
symble[2]=L->next;
if(b)b=b->next;
for(;b;b=b->next){
symble[3]=symble[2];
if(symble[3])
multiply(a,b->data,symble[0],symble[1]);
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)
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;}
temp=(int)symble[3]->data/10000;