显示数字的因素

时间:2018-12-12 03:43:37

标签: c# math

我正在尝试获取用户提供的数字的所有因素,并在单击按钮后在MessageBox上显示所有因素。

这是从Getting Factors of a NumberMark Byers答案中摘录的我的代码代码,我认为我已经很接近了,但是我显示的因素数量实际因子数。

例如,如果用户键入10并单击按钮,则MessageBox将显示数字4,但我希望它显示10的实际因数,应为1,2,5,10。

*如何显示因素?

public static double computeAverage(List<Number> numbers) {
  double sum = 0;
  for (Number n : numbers) {
    sum += n.doubleValue();
  }
  return sum / n.size();
}

3 个答案:

答案 0 :(得分:0)

        public List<int> Divisors(int fact)
    {
        List<int> factors = new List<int>();
        int number = int.Parse(textBox2.Text);
        int factorCount = 0;
        int sqrt = (int)Math.Ceiling(Math.Sqrt(number));

        for (int i = 1; i < sqrt; i++)
        {
            if (number % i == 0)
            {
                factors.Add(i);
                factorCount += 2; //  We found a pair of factors.
            }
        }

        // Check if our number is an exact square.
        if (sqrt * sqrt == number)
        {
            factorCount++;
        }

        // return factorCount;
        return factors;
    }
    private void ShowallButton_Click(object sender, EventArgs e)
    {
        int input = int.Parse(textBox2.Text);
        List<int> factors = Divisors(input);
        string message = $"The Divisors are {string.Join(",", factors)}";
        MessageBox.Show(message);
    }

答案 1 :(得分:0)

这不是很近。

让我们首先来看分解

% Operator (C# Reference)

  

余数运算符%将其除后的余数   第一个操作数加上第二个操作数。

public static void Divisors(int number )
{
   for (var x = 1; x <= number; x++)
      if (number % x == 0) // no remainder it must be a factor
         Console.WriteLine(x);
}

用法

Divisors(10);

输出

1
2
5
10

现在让我们使用Enumerable来返回yield

public static IEnumerable<int> Divisors(int number )
{
   for (var x = 1; x <= number; x++)
      if (number % x == 0) // no remainder it must be a factor
         yield return x;
}

用法

var results = Divisors(10);

Console.WriteLine(string.Join(", ", results));

输出

1, 2, 5, 10

其他资源

yield (C# Reference)

  

在语句中使用yield上下文关键字时,表示   出现在其中的方法,运算符或获取访问器是   迭代器。使用yield定义迭代器可消除对   显式的额外类(包含状态的类   枚举,请参见IEnumerator的示例)   自定义集合类型的IEnumerable和IEnumerator模式。

String.Join Method

  

连接指定数组的元素或a的成员   集合,在每个元素之间使用指定的分隔符或   成员。

答案 2 :(得分:0)

private void ShowallButton_Click(object sender, EventArgs e)
    {
        var input = int.Parse(textBox2.Text);
        var output = Divisors(input);

        var message = string.Join(Environment.NewLine, output);
        MessageBox.Show(message);
    }

    public List<int> Divisors(int number)
    {
        var factors = new List<int>();
        for (var i = 1; i <= number; i++)
        {
            if (number % i == 0)
            {
                factors.Add(i);
            }
        }
        return factors;
    }