超大整数的加减乘除

/*功能:就输入式较大的正整数进行加减乘除处理
2017.2.14
[第一次更改:2017.2.14]
[完成于:2017.2.14]
*/
#include<stdio.h>
int main()
{
   char c1[1000],c2[1000];
   int i,ii,iii,iiii,n,m,zheng,qufu;
   for(i=0;i<1000;i++)
   {
       scanf("%c",&c1[i]);
       if(c1[i]=='\n')
          {
             n=i;
             break;
          }
   }
   int shu1[n];
   for(i=0;i<n;i++)
   {
       shu1[n-1-i]=c1[i]-48;
   }
   printf("\n");
   char fuhao;
   scanf("%c",&fuhao);
   printf("\n");
   for(i=0;i<1000;i++)
   {
       scanf("%c",&c2[i]);
       if(c2[i]=='\n')
          {
             m=i;
             break;
          }
   }
   int shu2[m];
   for(i=0;i<m;i++)
   {
       shu2[m-i-1]=c2[i]-48;
   }//高位存高位数
   int jieguo[1000];
   for(i=0;i<1000;i++)
   {
       jieguo[i]=0;
   }//赋值
   int e;
   if(fuhao=='+')
   {
       if(n>=m)
       {
          for(i=0;i<m;i++)
           {
               jieguo[i]=shu1[i]+shu2[i];
           }
           for(;i<n;i++)
           {
               jieguo[i]=shu1[i];
           }
     }
       else
       {
           for(i=0;i<n;i++)
           {
               jieguo[i]=shu1[i]+shu2[i];
           }
           for(;i<m;i++)
           {
               jieguo[i]=shu2[i];
           }
     }
       for(i=0;i<n;i++)
       {
           if(jieguo[i]>9)
           {
               jieguo[i]=jieguo[i]-10;
               jieguo[i+1]++;
           }
       }
   }
   else if(fuhao=='-')
   {
       if(n>m)
       {
           for(i=0;i<m;i++)
           {
               jieguo[i]=shu1[i]-shu2[i];
           }
           for(;i<n;i++)
           {
               jieguo[i]=shu1[i];
           }
     }
       else if(n==m)
       {
           for(ii=n-1;ii<n;ii--)
           {
               if(shu1[ii]>shu2[ii])
               {
                   for(i=0;i<m;i++)
                  {
                       jieguo[i]=shu1[i]-shu2[i];
                  }
                   break;
               }
               else if(shu1[ii]<shu2[ii])
               {
                   for(i=0;i<n;i++)
                   {
                       jieguo[i]=shu2[i]-shu1[i];
                   }
                   qufu=1;
                   break;
               }
               else if(shu1[ii]==shu2[ii])
               {
                   continue;
               }
           }
       }
       else
       {
           for(i=0;i<n;i++)
           {
               jieguo[i]=shu2[i]-shu1[i];
           }
           for(;i<m;i++)
           {
               jieguo[i]=shu2[i];
           }
           qufu=1;
       }
       for(i=0;i<m;i++)
           {
               if(jieguo[i]<0)
               {
                   jieguo[i]=jieguo[i]+10;
                   jieguo[i+1]--;
               }
           }
   }
   else if(fuhao=='*')
   {
           for(ii=0;ii<m;ii++)
           {
               for(i=0;i<n;i++)
               {
                    jieguo[i+ii]=jieguo[i+ii]+shu1[i]*shu2[ii];
               }
           }
           for(i=0;i<m+n;i++)
           {
               if(jieguo[i]>9)
               {
                   zheng=jieguo[i]/10;
                   jieguo[i]=jieguo[i]%10;
                   jieguo[i+1]=jieguo[i+1]+zheng;
               }
           }
   }
   else if(fuhao=='/')
   {
       int shu3[n];
       if(n<m)
       {
          //不作处理
       }//采取逐减法:挨个减,并逐次检验。减多了,再加回来。
     else if(n>=m)
       {
           for(iiii=n-m,iii=0;iiii>=0;iiii--,iii++)
           {
               for(jieguo[iiii]=1;;jieguo[iiii]++)
               {
                   for(i=n-1;i>=0;i--)
                  {
                      shu3[i]=shu1[i];
                  }
                  for(i=n-1-iii,ii=m-1;ii>=0;ii--,i--)
                  {
                      shu3[i]=shu3[i]-shu2[ii]*jieguo[iiii];
                  }
                  for(i=0;i<n-1;i++)
                  {
                      zheng=0;
                      while(shu3[i]<0)
                      {
                          shu3[i]=shu3[i]+10;
                          zheng++;
                      }
                      shu3[i+1]=shu3[i+1]-zheng;
                  }
                  for(e=n-1;e>=0&&shu3[e]==0;e--);
                      if(shu3[e]>0)
                      {
                          continue;
                      }
                      else if(shu3[e]<0)
                      {
                          jieguo[iiii]--;
                          break;
                      }
                      else if(e==-1||(e==0&&shu3[e]<=shu2[m-1]))
                      {
                          break;
                      }
             }
               for(i=n-1-iii,ii=m-1;ii>=0;ii--,i--)
               {
                   shu1[i]=shu1[i]-(shu2[ii]*jieguo[iiii]);
               }
               for(i=0;i<n-1;i++)
               {
                   zheng=0;
                   while(shu1[i]<0)
                   {
                       shu1[i]=shu1[i]+10;
                       zheng++;
                   }
                   shu1[i+1]=shu1[i+1]-zheng;
               }
           }
           }
       }
 for(e=999;jieguo[e]==0&&e>=0;e--);
   printf("=");
   if(qufu==1)
   {
       printf("-");
   }
   if(e==-1)
   {
          printf("0");
   }
   else
   {
           for(i=e;i>=0;i--)
       {
           printf("%d",jieguo[i]);
       }
   }
   if(fuhao=='/')
       {
           printf("......");
           for(e=n-1;shu1[e]==0&&e>=0;e--);
           for(i=e;i>=0;i--)
           {
               printf("%d",shu1[i]);
           }
       }
   return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值