• 51nod 1005 大数加法


    #include<iostream>
    #include<string>
    using namespace std;
    #define MAXN 10001
    int a[MAXN]={0},b[MAXN]={0};
    bool init(int a[]) 
    { 
      int i;
      string s; 
      cin>>s;
      a[0]=s.length();
      if(s[0]=='-')
      {
        //a[0]--;
        for(i=1;i<=a[0];i++)
            a[i]=s[a[0]-i]-'0';
        a[a[0]]=0;
        a[0]--;
        return false;
      }
      else
      {
        for(i=1;i<=a[0];i++)
          a[i]=s[a[0]-i]-'0';
        return true;
      }
    }
    void print(int a[])  
    {
      int i;
      if (a[0]==0){cout<<0<<endl;return;}
      for(i=a[0];i>0;i--) cout<<a[i];
      cout<<endl;
      return ;
    }
    void  jia(int a[],int b[]) 
    { int i,k; 
      if(a[0]<b[0])a[0]=b[0];    
      for(i=1;i<=a[0];i++) a[i]+=b[i];   
      for(i=1;i<=a[0];i++)
        { 
          a[i+1]+=a[i]/10;
          a[i]%=10;
        } 
      if(a[a[0]+1]>0) a[0]++;
    }
    int compare (int a[],int b[]) 
    { int i; 
      if (a[0]>b[0]) return 1;//a的位数大于b则a比b大 
      if (a[0]<b[0]) return -1;//a的位数小于b则a比b小 
      for(i=a[0];i>0;i--)  //从高位到低位比较 
         { if (a[i]>b[i]) return 1; 
           if (a[i]<b[i]) return -1;
         } 
      return 0;//各位都相等则两数相等。 
    } 
    
    int jian(int a[],int b[])//计算a=a-b
    { 
      int flag,i; 
      flag=compare(a,b); //调用比较函数判断大小 
      if (flag==0) {a[0]=0;return 1;} //相等 
      if(flag==1) //大于   
        {
            for(i=1;i<=a[0];i++) 
           {
               if(a[i]<b[i]){ a[i+1]--;a[i]+=10;} //若不够减则向上借一位 
            a[i]=a[i]-b[i];
           } 
         while(a[a[0]]==0) a[0]--; //修正a的位数 
         return 1;
        } 
      if (flag==-1)//小于  则用a=b-a,返回-1 
       { 
         for(i=1;i<=b[0];i++)
          {if(b[i]<a[i]){b[i+1]--;b[i]+=10;} //若不够减则向上借一位 
           a[i]=b[i]-a[i];
          } 
         a[0]=b[0]; 
         while(a[a[0]]==0) a[0]--; //修正a的位数 
         return -1;
       } 
    }
    int main()
    {
      bool signa=false,signb=false;
      signa = init(a);
      signb = init(b);
      if(signa&&signb)
      {
          jia(a,b);
          print(a);
      }
      else if(!signa&&!signb)
      {
          jia(a,b);
          printf("-");
          print(a);
      }
      else
      {
         if(jian(a,b)==1)
         {
             if(!signa&&a[0])
                 cout<<'-';
         }
         else
         {
             if(!signb&&a[0])
                 cout<<'-';
         }
         print(a);
      }
      return 0;
    }

    大数加法

  • 相关阅读:
    在DataList控件中删除数据记录
    java中进行二进制,八进制,十六进制,十进制间进行相互转换
    Java中重载重写
    WCF 第七章 寄宿 在Windows 进程激活服务中寄宿服务
    .NET 中的十进制浮点类型(译文)
    .NET 中的二进制浮点类型(译文)
    WCF 第六章 序列化和编码 总结
    WCF 第六章 序列化和编码 为自定义序列化使用XmlSerializer
    WCF 第七章 寄宿 在IIS7中寄宿服务
    WCF 第七章 寄宿
  • 原文地址:https://www.cnblogs.com/joeylee97/p/6135241.html
Copyright © 2020-2023  润新知