乘法计算原理懂,但是中间计算代码真的看不懂,可以加vx细说,非常感谢🙏
解释如下:
首先,定义了一个长度为 10000 的整型数组 Store,用于存储计算结果。数组下标从 0 开始,因此 Store[0] 表示数组的第一个元素。
然后,定义了几个变量,用于记录每个位上的结果和进位:
接着,通过一个 for 循环,从 1 开始遍历到 N,即要计算的数字位数。在循环体内,通过一个 for 循环,将当前位上的结果和进位计算出来,并存储到 Store 数组中。
计算过程中,every 的值等于上一位的结果乘以当前位上的数字,加上当前位上的进位,即 every = Store[j-1] * i + M。其中,j 表示当前位上的数字,i 表示当前位上的位数,M 表示当前位上的进位。
计算完成后,将 every 的值对 10 取余,得到当前位上的结果,存储到 Store 数组中。同时,将 M 的值加 1,表示当前位上的进位加 1。
最后,通过另一个 for 循环,输出 Store 数组中的所有元素,即输出计算结果。
需要注意的是,这段代码中存在一些问题,例如:
因此,在实际使用中需要进行修改和完善。
不知道你这个问题是否已经解决, 如果还没有解决的话:希望对你有帮助~
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
比如当前N是5,那么现在进来内循环的时候
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;
}