我有一个包含 13 个数字的列表,我想将它们相乘
Posted
技术标签:
【中文标题】我有一个包含 13 个数字的列表,我想将它们相乘【英文标题】:I have a list with 13 numbers and i want to multiply them together 【发布时间】:2017-01-31 09:53:04 【问题描述】:我有一个字符串numbers
,其中包含13
数字,例如:
string numbers = "01234567890123456781";
我必须将它们相乘:
0 * 1 * 2 * 3 * ... * 7 * 8 * 1
我有一个添加数字在一起的解决方案:
0 + 1 + 2 + 3 + ... + 7 + 8 + 1
我将number
字符串转换为List<int> numb
,然后在 Linq Sum()
方法的帮助下对列表中的项目求和:
string numbers = "01234567890123456781";
List<int> numb = new List<int>();
for (int i = 0; i < numbers.Length; i++)
int num = int.Parse(numbers[i].ToString());
numb.Add(num);
for (int b = 0; b <numb.Count()-12; b++)
var x = numb.Skip(b).Take(13);
int a = x.Sum(); // <- it's easy to sum, but what shall I do to multiply?
Console.WriteLine(a);
但是,Linq 没有任何Mult()
或类似的方法,那么我该怎么做才能将这些项目相乘?
【问题讨论】:
您有问题吗? 嗨。欢迎来到 SO。请参阅我们关于提问和如何正确表达问题的指南 (***.com/help/how-to-ask)。另外,我相信您的问题已经得到解答。 @Sam:我已经编辑了你的问题;下次,请在描述预期结果、您的努力和确切问题时尽可能清楚(Linq 确实有Sum()
,但在您的情况下没有.Mult()
的踪迹)
【参考方案1】:
假设numbers
只包含数字[0..9]
,一个简单的Linq 就可以了:
// since 0 * anything == 0, I've removed all 0's to obtain non-zero result:
// 1 * 2 * 3 * ... * 7 * 8 * 1
string numbers = "123456789123456781";
// long: int is not large enough
long result = numbers
.Select(c => (long) (c - '0'))
.Aggregate((s, a) => s * a);
结果:
// 14631321600
Console.Write(result);
Aggregate
(自定义聚合)如果您想将 IEnumerable<T>.Sum()
从求和(如您当前的代码)更改为乘法:
...
var x = numb.Skip(b).Take(13); //TODO: get rid of magic number 13
// instead of summation
// int a = x.Sum();
// let's use multiplication as a custom aggregation:
// please, mind overflow: int is not enough when multiplying items
long a = x
.Select(item => (long) item)
.Aggregate((s, item) => s * item);
【讨论】:
以上是关于我有一个包含 13 个数字的列表,我想将它们相乘的主要内容,如果未能解决你的问题,请参考以下文章