我正在解决来自CodeChef的问题,需要计算n个数字的阶乘。
用户输入一个数字,确定要对多少个整数执行阶乘计算,然后输入要计算的数字。
我的问题在于乘法本身。例如,如果我有一个int == 5,则结果将为20(它只会计算最后一个阶乘的n,而不是所有阶乘的n)。
这就是问题所在:
这显然与
但这会产生完全不同的结果:
如果我们再次输入5,那么输出将是-1899959296。
我知道我可以轻松地从其他提交中复制和粘贴,但我想知道为什么我的方法不能产生正确的输出。
以下是整个方法:
用户输入一个数字,确定要对多少个整数执行阶乘计算,然后输入要计算的数字。
我的问题在于乘法本身。例如,如果我有一个int == 5,则结果将为20(它只会计算最后一个阶乘的n,而不是所有阶乘的n)。
这就是问题所在:
for(int x = 0; x < _numbersToProcess.Length; x++) {// Loop throuigh Array by index
for (int y = 1; y < _numbersToProcess[x]; y++) {// Y is equal to less than index x
_result[x] = _numbersToProcess[x] * y;// Multiply x by y then add to array
}
}
外层循环定义要执行多少次计算。
内层循环通过迭代_numberToProcess
的每个索引并将其乘以小于要计算的数字的每个数字来计算阶乘。
问题是阶乘计算会互相覆盖,例如:
5的阶乘结果为:20
,但应该是120(它会一直覆盖自己,直到达到最后一个乘数)
所以我尝试了以下方法:
_result[x] = _numbersToProcess[x] *= y;
这显然与
_numbersToProcess[x] = _numbersToProcess[x] * y;
相同。但这会产生完全不同的结果:
如果我们再次输入5,那么输出将是-1899959296。
我知道我可以轻松地从其他提交中复制和粘贴,但我想知道为什么我的方法不能产生正确的输出。
以下是整个方法:
int _numbers = int.Parse(Console.ReadLine());// Get number of ints to calculate
int[] _numbersToProcess = new int[_numbers];// Array of inputs
int[] _result = new int[_numbers];
int i = 0;
while(i < _numbersToProcess.Length) {
_numbersToProcess[i] = int.Parse(Console.ReadLine());
i++;
}
for(int x = 0; x < _numbersToProcess.Length; x++) {// Loop throuigh Array by index
for (int y = 1; y < _numbersToProcess[x]; y++) {// Y is equal to less than index x
_result[x] = _numbersToProcess[x] *= y;// Multiply x by y then add to array
}
}
for (int n = 0; n < _result.Length; n++) {// Y is equal to less than index x
Console.WriteLine(_result[n]);// Write to console
}
Console.ReadLine();