关于C#的大数乘法问题

public static string Multiply(string num1, string num2)
{
int carry;
int[] result;
int[] multiplicand, multiplier;

        multiplicand = Reverse(num1);
        multiplier = Reverse(num2);//这两条代码实现字符串反转,并变成数组形式

        //存储大数相乘后的结果
        result = new int[multiplicand.Length + multiplier.Length + 3];
        //两层循环,完成大数乘法运算逐位相乘,然后错位相加
        for (int indexMplier = 0; indexMplier < multiplier.Length; indexMplier++)
        {
            for (int indexMplicand = 0; indexMplicand < multiplicand.Length; indexMplicand++)
            {
                result[indexMplier + indexMplicand] +=
                    multiplicand[indexMplicand] * multiplier[indexMplier];
            }
        }  
        //处理进位
        for (int index = 0; index < result.Length; index++)
        {
            carry = result[index] / 10;
                   result[index] = result[index] % 10;

            if (carry > 0)
            {
                result[index + 1] += carry;
            }
        }

        //将结果反转,返回
        return Reverse(result);
    }
}
    两个for循环都表示什么意思?还有result赋值那句,长度为啥+3?

兩個FOR循环是逐位相乘 [a,b,c]*[d,e,f] 會等於 [ad,ae,af],[bd,be,bf]....等等的組合,然後再错位相加
下面的那個for就是处理进位,在result[index]的數除10儲在carry中
result赋值那句,长度+3,是為了給result更多的位置去儲存兩個FOR循环逐位相乘出來的數

和人工运算的规则一样啊。
比如我们要计算 ab * cd
首先计算
b * d,如果结果超过10,那么这一位写 (b * d) % 10(比如结果是12,那么写2)
carry是进位,进位是(b * d) / 10(比如12,进位1)
再算a * d + carry,一样的道理,结果超过10,那么需要 % 10,carry=/10
...

为什么要加3?
因为两个数相乘,结果的位数最大比原来的数字位数的和大2
比如99*99=9801,四位数。其实+2我觉得就可以了。

第一个for:两层循环,完成大数乘法运算逐位相乘,然后错位相加
第二个for循坏:处理进位