【问题标题】:how to count the total amount of digits in a byte[] if you were to sum the array如果要对数组求和,如何计算字节 [] 中的总位数
【发布时间】:2022-11-04 00:18:18
【问题描述】:

我想创建一个函数,一旦对值求和,就可以计算位数

假设我有这个数组

byte[] array = new byte[] { 200, 300, 700 };

总结一下,您将获得 1200 的值

您可以使用这些功能获得位数

Math.Floor(Math.Log10(1200)+1) == 4

但是如果我总结起来并且数组中的值太多,我会得到一个整数溢出

public decimal countNumbers(byte[] array)
{
    decimal count = 0;

    foreach (byte value in array)
    {
         count = Math.Log10(Math.Pow(count, 10)+value);
    }

    return count;
}

这确实给出了我想要的正确输出,但是如果计数大于 28.898879583742193 (log10(decimal.MaxValue)),则会导致整数溢出

【问题讨论】:

  • 为了好玩,这里有一个仍然可以溢出的单行版本:public int countNumbers(byte[] array) { return Math.Floor(Math.Log10(array.Select(b => (long)b).Sum())); }

标签: c# math


【解决方案1】:

有一个BigInteger 数据类型可以对任意(整数)值求和。它甚至有一个Log10 方法,所以它的工作方式与标准整数变量非常相似。唯一的限制是BigInteger.Log10 的结果必须小于Double.MaxValue,但这听起来像是一个合理的限制。 (10^1E308 是一个非常大的数字)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 2011-05-27
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多