zoukankan      html  css  js  c++  java
  • 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;
    }

    大数加法

  • 相关阅读:
    学习ASP.NET MVC3(5) Controller
    关于测试
    [JAVA SE] Java反射机制
    Windows 8 的软件开发架构
    Servlet生命周期与工作原理
    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告(转载)
    JAVA小游戏代码(剪刀石头布)
    [JAVA SE] JSP中pageEncoding和charset区别,中文乱码解决方案
    我是工程师,不是编译器
    自己对三层架构理论的理解
  • 原文地址:https://www.cnblogs.com/joeylee97/p/6135241.html
Copyright © 2011-2022 走看看