如何找到每个数字在3中的所有三位数字,并且数字的加法等于数字本身。
例如:
3 ^ 3 + 7 ^ 3 + 1 ^ 3 = 371
更新
我必须找到100-999之间的所有数字,然后将每个数字分开然后执行三位数操作(数学运算)并检查所有数字是否等于数字本身
数字371满足以下条件:第三个数字的总和等于数字本身
答案 0 :(得分:6)
<强>答案强>
你可以使用这样的东西
public static IEnumerable<int> GetDigits(int num)
{
do { yield return num % 10; } while ((num /= 10) > 0);
}
public static bool SomeWeirdMathsOp(int num)
{
return num == GetDigits(num).Sum(x => (int)Math.Pow(x, 3));
}
用法
var list = Enumerable.Range(100, 900).Where(SomeWeirdMathsOp);
foreach (var item in list)
Console.WriteLine(item);
输出
153
370
371
407
只是为了好玩(因为我很讨厌)我决定对每个人的答案进行基准测试
<强>结果
Mode : Release
Test Framework : .NET Framework 4.7.1
Benchmarks runs : 100 times (averaged/scale)
Scale : 900
Name | Time | Range | StdDev | Cycles | Pass
--------------------------------------------------------------
MineTimes | 0.136 ms | 0.016 ms | 0.03 | 456,359 | Yes
Mine | 0.250 ms | 0.005 ms | 0.05 | 830,104 | Base
Mahsa | 0.332 ms | 0.008 ms | 0.03 | 1,122,867 | Yes
JohnyL | 2.135 ms | 0.204 ms | 0.34 | 7,262,956 | Yes
MineTimes是 Enigmativity的版本,它只是手动执行此功能
public static bool SomeWeirdMathsOp(int num)
{
return num == GetDigits(num).Sum(x => x * x * x);
}
在语句中使用yield关键字时,表示该 方法,运算符或获取它的访问器是迭代器。 使用yield来定义迭代器不需要显式 额外的类(保存枚举状态的类,
余数运算符(%)在除以后计算余数 第二个操作数。所有数字类型都已预定义 余数运营商。
Enumerable.Sum Method (IEnumerable, Func)
计算由其获得的Double值序列的总和 在输入序列的每个元素上调用转换函数。
Math.Pow Method (Double, Double)
返回指定数量的指定数字。
Enumerable.Range Method (Int32, Int32)
在指定范围内生成一系列整数。