qq_43412960 2018-11-25 02:28 采纳率: 78.6%
浏览 578
已采纳

关于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条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?