阶乘计算有没有人会的,求解!!

乘法计算原理懂,但是中间计算代码真的看不懂,可以加vx细说,非常感谢🙏

img

img

解释如下:

首先,定义了一个长度为 10000 的整型数组 Store,用于存储计算结果。数组下标从 0 开始,因此 Store[0] 表示数组的第一个元素。

然后,定义了几个变量,用于记录每个位上的结果和进位:

  • digit:表示当前处理的位数,从 1 开始。
  • every:表示当前位上的结果,初始值为 0。
  • M:表示当前位上的进位,初始值为 0。

接着,通过一个 for 循环,从 1 开始遍历到 N,即要计算的数字位数。在循环体内,通过一个 for 循环,将当前位上的结果和进位计算出来,并存储到 Store 数组中。

计算过程中,every 的值等于上一位的结果乘以当前位上的数字,加上当前位上的进位,即 every = Store[j-1] * i + M。其中,j 表示当前位上的数字,i 表示当前位上的位数,M 表示当前位上的进位。

计算完成后,将 every 的值对 10 取余,得到当前位上的结果,存储到 Store 数组中。同时,将 M 的值加 1,表示当前位上的进位加 1。

最后,通过另一个 for 循环,输出 Store 数组中的所有元素,即输出计算结果。

需要注意的是,这段代码中存在一些问题,例如:

  • 数组下标从 1 开始,而不是从 0 开始;
  • 变量 digit 的初始值为 1,不符合实际需求;
  • 变量 digit 的值没有更新,导致计算结果错误。

因此,在实际使用中需要进行修改和完善。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

希望对你有帮助~


int main()
{
    int Store[10000];
    Store[0] = 1;
    int every = 0;
    int M = 0;
    int digit = 1;
    if (N >= 0 && N <= 1000)//计算N的阶乘
    {
        for (int i = 1; i <= N; i++)//外循环  N
        {
            for (int j = 0; j < digit; j++)
            {
                /*内循环  当前结果乘以N
                    比如当前N5,那么现在进来内循环的时候
                    Store[]这个数组中存放的是4!的值也就是24
                    不过是倒着存储的,也就是Store[0] = 4,
                    Store[1] = 2;然后接下来的计算就是让Store[0]
                    和Store[1]分别乘以5,4*5=20,所以Store[0]从4变成了0,
                    进位M = 2,别慌,这个for循环还没有完,因为digit现在是2,
                    所以需要再循环一次
                    则,Store[1]*5=2*5=10,然后加上进位M等于12;
                    那么Store[1] = 2,M = 1;
                    进入while循环,Store[2] = 1;
                    至此,Store[] = { "0","2","1" },
                    最后倒叙输出,得到N的阶乘 5!= 120.
                */
                every = Store[j] * i + M;
                Store[j] = every % 10;
                M = every / 10;
            }
            while (M != 0)
            {
                Store[digit] = M % 10;
                M = M / 10;
                digit++;
            }
        }

        for (int i = digit-1;i>=0;i--)
        {
            cout << Store[i];
        }
    }

    getchar();
    return 0;
}