qq_43412960 2018-11-25 02:28 采纳率: 76.5%
浏览 580
已采纳

关于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?
  • 写回答

3条回答 默认 最新

  • weixin_43794631 2018-11-25 05:33
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?