【发布时间】: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())); }