两个大数求和,一个ACM水题的C#求解

本文介绍了一个自定义的大数类LargeNum,该类可以处理超出常规数据类型限制的大数,并提供了加法运算的功能。通过字符串存储数值,实现了大数之间的加法操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    class LargeNum
    {
        string numValue;
        public int Length
        {
            get { return numValue.Length; }
        }
        /// <summary>
        /// 获取和设置当前大数的制定位的数字值
        /// </summary>
        /// <param name="index">指定位的索引</param>
        /// <returns>指定位的数值</returns>
        public int this[int index]
        {
            get { return Convert.ToInt32(numValue[index].ToString()); }
        }
        /// <summary>
        ///  构造函数
        /// </summary>
        /// <param name="numValue">大数的值</param>
        public LargeNum(string numValue)
        {
            this.numValue = numValue;
        }
        /// <summary>
        /// 计算两个指定大数的和
        /// </summary>
        /// <param name="num1">一个数</param>
        /// <param name="num2">另一个数</param>
        /// <returns></returns>
        public static LargeNum operator +(LargeNum num1, LargeNum num2)
        {
            LargeNum numLong;
            LargeNum numShort;
            //根据两个数字的长度,分别设置为长的数和短的数
            if (num1.Length < num2.Length)
            {
                numShort = num1;
                numLong=num2;
            }
            else
            {
                numShort = num2;
                numLong =num1 ;
            }
            int[] result = new int[numLong .Length+ 1];

            //计算结果的后几位,从最后一位摆竖式开始算,计算到短的数那么多位
            for (int i =numLong.Length;i> numLong.Length - numShort.Length;  i--)
            {
                result[i] = numLong[i-1] + numShort[i - numLong.Length + numShort.Length-1]+result[i];
                if (result[i] >= 10)
                {
                    result[i-1] = 1;
                    result[i] = result[i] - 10;
                }
            }
            //计算结果的前几位,把长的数剩下的几位加上
            for (int i = numLong.Length - numShort.Length ; i >0; i--)
            {
                result[i] = numLong[i-1]+result[i];
                if (result[i] >= 10)
                {
                    result[i - 1] = 1;
                    result[i] = result[i] - 10;
                }
            }
            return new LargeNum( ConvertIntArrayToString(result)/*将计算结果转换成字符串*/);//将计算结果转换成大数,返回
        }

        public override string ToString()
        {
            return numValue;
        }
        /// <summary>
        /// 将指定的整型数组转换成字符串
        /// </summary>
        /// <param name="intArray">整型数组</param>
        /// <returns>对应字符串,每个整数对应数组的一位</returns>
        private static string ConvertIntArrayToString(int[] intArray)
        {
            string result="";
            for (int i = 1; i < intArray.Length; i++)
            {
                result += intArray[i].ToString();
            }
            if (intArray[0] >0)
            {
                result =intArray[0]+ result;
            }
            return result;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值