如何将数组中的所有值相乘?

时间:2013-11-21 22:02:12

标签: c# arrays multiplication

我有一个任务,我需要找到数组中所有数字的乘积,我不知道该怎么做。

    int[] numbers = new int[SIZE];

    Console.WriteLine("Type in 10 numbers");
    Console.WriteLine("To stop, type in 0");
    for (int input = 0; input < SIZE; input++)
    {
        userInput = Console.ReadLine();
        numberInputed = int.Parse(userInput);

        if (numberInputed == ZERO)
        {
            numberInputed = ONE;
            break;
        }
        else
        {
            numbers[input] = numberInputed;
        }

    }

这是我试图找到阵列中所有数字的乘积的地方。

    foreach (int value in numbers)
    {
        prod *= value;
    }

    Console.WriteLine("The product of the values you entered is {0}", prod);

我在foreach声明中做错了什么?提前致谢

编辑,遗漏了我声明的值

    const int SIZE = 10;
    const int ZERO = 0;
    string userInput;
    int numberInputed;
    int prod = 1;

当我键入所有十个值时,它现在有效但是如果我为了打破循环而放置一个0,那么一切都等于0.如何阻止0进入数组?

3 个答案:

答案 0 :(得分:20)

您可以将prod初始化为0,这意味着无论数组中的数字是多少,prod都将保持为0.请确保将其初始化为1以获得正确的结果:

int prod = 1;
foreach (int value in numbers)
{
    prod *= value;
}

你也可以使用Linq的Aggregate扩展方法做同样的事情:

using System.Linq; // put with other using directives

int prod = numbers.Aggregate(1, (a, b) => a * b);

<强>更新

真正的问题(我之前没有注意到)是你的数组没有完全填充,如果你提前摆脱你的循环。因此,您未设置的任何数组条目仍会初始化为0.要解决此问题,请使用List<int>代替int[]

using System.Collections.Generic; // put with other using directives

List<int> numbers = new List<int>(SIZE); // Capacity == SIZE

...

for (int input = 0; input < SIZE; input++)
{
    ...
    if (numberInputed == ZERO)
    {
        break;
    }
    else
    {
        numbers.Add(numberInputed);
    }
}

答案 1 :(得分:1)

问题在于,您无法跟踪数组中实际分配了值的项目数。如果使用零输入退出循环,则其余项目保持不变。由于默认情况下它们为零,因此您将在第二个循环中使用这些零,并且当数组中某处为零时,总产品将变为零。

通过将循环变量保持在循环之外来跟踪有多少项:

int input = 0;
while (input < SIZE)
{
    userInput = Console.ReadLine();
    numberInputed = int.Parse(userInput);
    if (numberInputed == ZERO) {
      break;
    }
    numbers[input] = numberInputed;
    input++;
}

现在您只能使用实际分配的项目:

for (int i = 0; i < input; i++) {
    prod *= numbers[i];
}

答案 2 :(得分:0)

将数组中的所有数字相乘

int[] array = { 1, 2, 3, 4, 5 };
int sum = array[0];
for (int i = 1; i != array.Length; i++)
{
    sum *= array[i];
}

如果您的数组以某种方式填充了零(0),请使用列表代替数组。