我需要使用数组写一个阶乘,但问题只是显示 120 五次,我想要的是 1,2,6,24,120 显示在textBox中
int factProg = 1;
public void factArray(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
factProg = factProg * arr[i];
}
}
int[] arr = {1,2,3,4,5};
for (int i = 0; i < arr.Length; i++)
{
factArray(arr);
textBox1.Text += Convert.ToString(factProg);
textBox1.Text += Environment.NewLine;
}
答案 0 :(得分:2)
简单地说 - 你的factArray方法总是计算整个数组长度的阶乘,这是一个固定的大小。您需要传递一个额外的参数 - 作为您想要停止计算的数组中的位置
如果您想使用数组计算,请尝试此操作:
int factProg;
public void factArray(int[] arr, int len)
{
factProg = arr[0];
for (int i = 1; i <= len; i++)
{
factProg = factProg * arr[i];
}
}
int[] arr = {1,2,3,4,5};
for (int i = 0; i < arr.Length; i++)
{
factArray(arr, i);
textBox1.Text += Convert.ToString(factProg);
textBox1.Text += Environment.NewLine;
}
您需要在方法中添加一个不超过数组长度的检查。
答案 1 :(得分:0)
请找到以下代码
public static void FactorialJohn(int[] arr)
{
List<int> Resarr = new List<int>();
arr.ToList().ForEach(x => Resarr.Add(Enumerable.Range(1, x).Aggregate((a, b) => a * b)));
foreach (var item in Resarr)
{
Console.WriteLine(item);
}
}
上面的代码为您提供了数组中每个元素的因子。