首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加两个对象的数组元素

添加两个对象的数组元素
EN

Stack Overflow用户
提问于 2018-12-06 06:53:26
回答 1查看 87关注 0票数 0
代码语言:javascript
运行
复制
class HugeInteger
{
    public const int HUGE_INTEGER_LIMIT = 40;
    public int[] hiDigits;
    public bool[] comparison;
    public int hiLength;
    private string hugeInteger;


    //constructor
    public HugeInteger()
    {
        hiDigits = new int[HUGE_INTEGER_LIMIT];
    }

    public HugeInteger(string hi)
    {
        hiDigits = new int[HUGE_INTEGER_LIMIT];
        hugeInteger = hi;
        Input(hi);   
    }

    public void Input(string input)
    {

        char[] hiDigitss = new char[HUGE_INTEGER_LIMIT];
        hiDigitss = input.ToCharArray();
        hiLength = hiDigits.Length;
        for (int i = hiLength - 1; i > 0; i--)
        {

            hiDigits[i] = hiDigitss[i] - '0';

    }

    public override string ToString()
    {
        string num = string.Join("", hiDigits.Select(x => x.ToString()).ToArray());
        return num;
    }

    public HugeInteger Add(HugeInteger val)
    {
        var result = new HugeInteger();
        int carry = 0;
        int sum = 0;
        hiLength = Math.Max(val.hiDigits.Length, this.hiDigits.Length);
        for (int i = 0; i < result.hiLength - 1; i++)
        {
            sum = this.hiDigits[i] + val.hiDigits[i] + carry;
            result.hiDigits[i] = sum % 10;
            carry = sum / 10;
        }

        //int[] result = new int[number1.length];
        //for (int i = number1.length - 1; i >= 0; i--)
        //{
        //    sum = number1[i] + number2[i] + carry;
        //    result[i] = sum % 10;
        //    carry = sum / 10;
        //}`enter code here`

        return result;
    }

    public bool IsEqualTo(HugeInteger hi)
    {
        comparison = new bool[hi.hiDigits.GetUpperBound(0)];
        for (int i = 0; i < this.hiDigits.GetUpperBound(0); i++)
        {
            if (this.hiDigits[i] == hi.hiDigits[i])
            {
                comparison[i] = true;
            }
            else
            {
                comparison[i] = false;
            }
        }
        if(comparison.All(c => c.Equals(true)))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

在上面的代码中,我试图在main中添加两个对象,使用

代码语言:javascript
运行
复制
 num1.Add(num2)

num1num2都持有一个in (int[])数组,该数组表示数字字符串中的数字。我正在尝试创建一个方法,通过添加result数组和num2数组来创建一个名为num2的新数组。通过调试,它给了我

指数超出范围

添加时看不到val(num2),但this(num1)却是。

我也在尝试做另一个减法。

编辑:按要求粘贴更多代码。当前正在尝试更改/修复input方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 07:44:35

看起来,您需要一个比初始数组更大的数组:

代码语言:javascript
运行
复制
    988 +  // 3 digits : int[3]
     45    // 2 digits : int[2]
   ----    
   1033    // 4 digits (cause of index out of range exception): should be int[4]

让我们使用List<int> (假设这两个值都是非负的,所以我们不需要注意符号):

代码语言:javascript
运行
复制
   public HugeInteger Add(HugeInteger val) {
     if (null == val)   
       throw new ArgumentNullException(nameof(val));

     int length = Math.Max(val.hiDigits.Length, this.hiDigits.Length);

     List<int> list = new List<int>(length + 1);

     int carry = 0;

     for (int i = 0; i < length; ++i) {
       // ? : - be careful; lengths can be different (another source of index out of range)
       int sum = ((i < val.hiDigits.Length) ? val.hiDigits[i] : 0) + 
                 ((i < this.hiDigits.Length) ? this.hiDigits[i] : 0) +
                 carry;

       list.Add(sum % 10);
       carry = sum / 10;
     }

     // do not forget to add carry (which can be 1)  
     list.Add(carry);
     list.Reverse();

     int[] array = list
       .SkipWhile(item => item == 0) // remove leading zeros: 00123 -> 123
       .DefaultIfEmpty()             // at least one digit: 000 -> 0
       .ToArray();

     //TODO: check the right syntax here
     return new HugeInteger(array);
   }  
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53646025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档