我有一个包含 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&lt;T&gt;.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 个数字的列表,我想将它们相乘的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据框列表除以值列表?

将一些数据序列分成几个相邻的部分

如何连接两个 ArrayList?

在同一列内相乘

找到与给定数字相乘的数字的有效方法

使用 Strassen 算法将 2 个数字与 n 位相乘的算法