长整数四则运算实验报告

{ 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; }

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4