注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

实现大数的加减法类  

2013-05-02 19:02:32|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
using System;
namespace Castor
{
   /// <summary>
   /// 写个大数加减法玩玩
   /// </summary>
   class BigNumber
   {
       private int len;
       public int DigitalLength
       {
           get
           {
               return len;
           }
       }

       private int[] val;

       private string sv;
       public string StringValue
       {
           get
           {
               return sv;
           }
       }

       //构造函数
       public BigNumber(string s)
       {
           sv = s.Trim();
           len = sv.Length;
           val = new int[len];
           for (int i = 0; i < len; i++)
               val[i] = int.Parse(sv[i].ToString());
       }//.ctor

       //重载加法运算
       public static BigNumber operator +(BigNumber bn1, BigNumber bn2)
       {
           int length = bn1.len > bn2.len ? bn1.len : bn2.len;
           int[] op1, op2;
           //对齐之后的每一位值构成的数组
           op1 = new int[length];
           op2 = new int[length];
           System.Text.StringBuilder sb = new System.Text.StringBuilder(length+1);
           int t = 0;

           int delt = Math.Abs(bn1.len - bn2.len);
           if (bn1.len == length)
           {
               op1 = bn1.val;
               for (int i = 0; i < delt; i++)
                   op2[i] = 0;
               for (int i = delt; i < length; i++)
                   op2[i] = bn2.val[i - delt];
           }

           if (bn2.len == length)
           {
               op2 = bn2.val;
               for (int i = 0; i < delt; i++)
                   op1[i] = 0;
               for (int i = delt; i < length; i++)
                   op1[i] = bn1.val[i - delt];
           }
           for (int i = length - 1; i >= 0; i--)
           {
               sb.Insert(0,(op1[i] + op2[i] + t) % 10);
               t = (op1[i] + op2[i] + t) / 10;
           }
           if (t != 0)
               sb.Insert(0, t);
           return new BigNumber(sb.ToString());
       }

       //重载减法运算
       public static BigNumber operator -(BigNumber bn1, BigNumber bn2)
       {
           int length = bn1.len > bn2.len ? bn1.len : bn2.len;
           int[] op1, op2;
           //对齐之后的每一位值构成的数组
           op1 = new int[length];
           op2 = new int[length];
           return null;
       }
   }
}
  评论这张
 
阅读(1771)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016