{ if(h1->next!=0) { p1->prior->data-=1; p1->data+=10000; } } p1=p1->prior; }
if(h1->next->data>=10000) //处理最前面的数 { InsertNode(h1,0,h1->next->data/10000); h1->next->next->data%=10000; } if(h1->data<=-10000)
{ InsertNode(h1,0,h1->next->data/10000); h1->next->next->data%=-10000; } PrintNode(h1); }
void jian(DLNode *h1,DLNode *h2) //两数相减 { DLNode *p1=h1->prior,*p2=h2->prior; while(p1!=h1&&p2!=h2) //每个链表元素相减 { p1->data-=p2->data ; p1=p1->prior; p2=p2->prior; } p1=h1->prior;
while(p1!=h1->next) //处理链表元素 { if(p1->data>=10000)
{ p1->prior->data+=p1->data/10000; p1->data%=10000; }
if(p1->data<0) //处理负数 { if(h1->next!=0) { p1->prior->data-=1; p1->data+=10000; } } p1=p1->prior; }
if(h1->next->data>=10000) //处理最前面的数 { InsertNode(h1,0,h1->next->data/10000); h1->next->next->data%=10000; } if(h1->data<=-10000)
{ InsertNode(h1,0,h1->next->data/-10000); h1->next->next->data%=-10000; } PrintNode(h1); }
int main() //入口函数 {
DLNode *head1,*head2; InitNode(&head1); InitNode(&head2);
char data1[N],data2[N]; char d1[10],d2[10]; int i,j,k; int xun; while(1)
{ printf(\输入数据:\\n\scanf(\ InitNode(&head1); InitNode(&head2); i=0;k=0;
while(data1[i]!=';') //将数1用链表储存 {
for(j=0;j<10;j++) d1[j]=0; j=0;
while(data1[i]!=';'&&data1[i]!=',') d1[j++]=data1[i++]; if(data1[i]==',') i++;
if(data1[0]=='-') //处理正负数
j=-(int)fabs(atoi(d1));//将字符串转换成整数 else j=atoi(d1);
InsertNode(head1,k++,j); }
i=0; k=0;
while(data2[i]!=';') //将数2用链表储存 {
for(j=0;j<10;j++) d2[j]=0; j=0;
while(data2[i]!=';'&&data2[i]!=',') d2[j++]=data2[i++]; if(data2[i]==',') i++;
if(data2[0]=='-') //处理正负数 j=-(int)fabs(atoi(d2)); else j=atoi(d2);
InsertNode(head2,k++,j); }
printf(\选择加减法:1—加法,2-减法\\n\ scanf(\ switch(xun) {
case 1:if(strlen(data1)>strlen(data2)) //较长的数作为被加数 add(head1,head2); else add(head2,head1); break;
case 2:if(strlen(data1)>strlen(data2)) //较长的数作为被减数 jian(head1,head2); else jian(head2,head1); break;
default:break; }
DestroyNode(&head1); DestroyNode(&head2); } return 0; }