我正在尝试获取用户提供的数字的所有因素,并在单击按钮后在MessageBox上显示所有因素。
这是从Getting Factors of a Number的Mark 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();
}
答案 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)
这不是很近。
让我们首先来看分解
余数运算符%将其除后的余数 第一个操作数加上第二个操作数。
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上下文关键字时,表示 出现在其中的方法,运算符或获取访问器是 迭代器。使用yield定义迭代器可消除对 显式的额外类(包含状态的类 枚举,请参见IEnumerator的示例) 自定义集合类型的IEnumerable和IEnumerator模式。
连接指定数组的元素或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;
}