设计一个程序实现两个任意长的整数求和与差的运算

2020-05-29 社会 91阅读

#include 

#include 

#include 

//mat97

//以下是双链表的节点结构,每个节点存储一个4位的数,比如1,0031,0056存入链表后就是1,31,56三个节,输出的时候再补0输出!

typedef struct node{

  int n;

  struct node *next;

  struct node *prev;

} node;

node *p;

char num1[1024],num2[1024];

int conv(char *a)

{

  int n=0,i;

  for(i=0;a[i];++i)

  {

      n*=10;

      n+=(a[i]-'0');

  }

  return n;

}

int main()

{

  char c[2];

  int i,f;

  node *q;

  p=(node*)malloc(sizeof(node));

  p->next=p->prev=0;

  q=p;

  num1[0]=num2[0]=',';

  printf("Enter num 1:\n");

  scanf("%s",num1+1);

  for(i=strlen(num1);i>=0;--i)

  {

      if(num1[i]==',')

      {

          num1[i]=0;

          q->next=(node*)malloc(sizeof(node));

          q->next->prev=q;

          q->next->next=0;

          q=q->next;

          q->n=conv(num1+i+1);

      }

  }

  q->next=p;

  p->prev=q;

  printf("Enter op:\n");

  scanf("%s",c);

  *c=*c=='+'?0:1;

  printf("Enter num 2:\n");

  scanf("%s",num2+1);

  q=p;f=0;

  if(!*c) //+

  {

      for(i=strlen(num2);i>=0;--i)

      {

          if(num2[i]==',')

          {

              num2[i]=0;

              if(q->next==p)

              {

                  q->next=(node*)malloc(sizeof(node));

                  q->next->next=p;

                  q->next->prev=q;

                  q->next->n=0;

                  p->prev=q->next;

              }

              q=q->next;

              q->n+=(conv(num2+i+1)+f);

              if(q->n<10000)

                  f=0;

              else

              {

                  f=1;

                  q->n-=10000;

              }

          }

      }

      if(f)

      {

          if(q->next==p)

          {

              q->next=(node*)malloc(sizeof(node));

              q->next->next=p;

              q->next->prev=q;

              q->next->n=1;

          }

          else

          {

              while(q->next!=p)

              {

                  q=q->next;

                  q->n+=1;

                  if(q->n<10000)

                  {

                      f=0;

                      break;

                  }

                  else

                  {

                      q->n=0;

                      f=1;

                  }

              }

              if(f)

              {

                  q->next=(node*)malloc(sizeof(node));

                  q->next->next=p;

                  q->next->prev=q;

                  q->next->n=1;

              }

          }

      }

      printf("%d,",p->prev->n);

      for(q=p->prev->prev;q!=p;q=q->prev)

          printf("%04d,",q->n);

  }

  else //-

  {

      for(i=strlen(num2);i>=0;--i)

      {

          if(num2[i]==',')

          {

              num2[i]=0;

              if(q->next==p)

              {

                  q->next=(node*)malloc(sizeof(node));

                  q->next->next=p;

                  q->next->prev=q;

                  q->next->n=0;

                  p->prev=q->next;

              }

              q=q->next;

              q->n-=(conv(num2+i+1)+f);

              if(q->n>=0)

                  f=0;

              else

              {

                  f=1;

                  q->n+=10000;

              }

          }

      }

      if(f)

      {

          if(q->next==p)

          {

              q->n-=10000;

          }

          else

          {

              while(q->next!=p)

              {

                  q=q->next;

                  q->n-=1;

                  if(q->n>=0)

                  {

                      f=0;

                      break;

                  }

                  else

                  {

                      q->n+=10000;

                      f=1;

                  }

              }

              if(f)

              {

                  q->n-=10000;

              }

          }

      }

      printf("%d,",p->prev->n);

      for(q=p->prev->prev;q!=p;q=q->prev)

          printf("%04d,",q->n);

  }

  return 0;

}


纯手打,已测试,楼主先看着,有不懂的再追问

加法:


减法:


编码辛苦,希望各位大神不要copy,小弟跪谢……

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com