⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1文本文档.txt

📁 不限制长度的整数加法,使用前请复制头文件至根目录,否则无法使用
💻 TXT
字号:
#include<stdio.h>
#include<stdlib.h>
#define HUNTHOU 10000


typedef struct node{ int data;
                     struct node *next;
                  }NODE;                 

NODE *insert_after(NODE *u,int num);     
NODE *addint(NODE *p,NODE *q);          
void printint(NODE *s);
NODE *inputint(void);




int main()
{
   NODE *s1,*s2,*s;
   NODE *inputint(), *addint(), *insert_after();
   printf("请输入加数S1 ");
   s1=inputint();                                                             
   printf("请输入被加数S2 ");
   s2=inputint();            
   printf(" S1="); printint(s1); putchar('\n');     
   printf(" S2="); printint(s2); putchar('\n');     
   s=addint(s1,s2);                                 
   printf("S1+S2="); printint(s); putchar('\n');    
system("PAUSE");
    return EXIT_SUCCESS;
}





NODE *insert_after(NODE *u,int num)
{
   NODE *v;
   v=(NODE *)malloc(sizeof(NODE));      
   v->data=num;                         
   u->next=v;                           
   return v;
}








NODE *addint(NODE *p,NODE *q)         
{
   NODE *pp,*qq,*r,*s,*t;
   int total,number,carry;
   pp=p->next; qq=q->next;
   s=(NODE *)malloc(sizeof(NODE));     
   s->data=-1;
   t=s; carry=0;                      
   while(pp->data!=-1&&qq->data!=-1)    
   {
      total=pp->data+qq->data+carry;     
      number=total%HUNTHOU;             
      carry=total/HUNTHOU;              
      t=insert_after(t,number);         
      pp=pp->next;                         
      qq=qq->next;
   }
   r=(pp->data!=-1)?pp:qq;         
   while(r->data!=-1)              
   {
      total=r->data+carry;         
      number=total%HUNTHOU;       
      carry=total/HUNTHOU;        
      t=insert_after(t,number);     
      r=r->next;                  
   }
   if(carry) t=insert_after(t,1);     
   t->next=s;                   
   return s;                    
}











NODE *inputint(void)    
{
   NODE *s,*ps,*qs;
   struct number {int num;
                  struct number *np;
               }*p,*q;
   int i,j,k;
   long sum;
   char c;
   p=NULL;    
   while((c=getchar())!='\n')    
      if(c>='0'&&c<='9')           
      {
         q=(struct number *)malloc(sizeof(struct number));    
         q->num=c-'0';           
         q->np=p;                
         p=q;
      }
   s=(NODE *)malloc(sizeof(NODE));
   s->data=-1;                  
   ps=s;
   while(p!=NULL)        
   {
      sum=0;i=0;k=1;
      while(i<4&&p!=NULL)          
      {
         sum=sum+k*(p->num);   
         i++; p=p->np; k=k*10;
      }
      qs=(NODE *)malloc(sizeof(NODE));         
      qs->data=sum;                    
      ps->next=qs;
      ps=qs;
   }
   ps->next=s;
   return s;
}









void printint(NODE *s)
{
   if(s->next->data!=-1)         
   {
      printint(s->next);             
      if(s->next->next->data==-1)
         printf("%d",s->next->data);
      else{
         int i,k=HUNTHOU;
         for(i=1;i<=4;i++,k/=10)
            putchar('0'+s->next->data%(k)/(k/10));
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -