gpt4 book ai didi

c# - 获取无符号长整数中的位数c#

转载 作者:可可西里 更新时间:2023-11-01 08:41:40 27 4
gpt4 key购买 nike

我正在尝试确定 C# ulong 数字中的位数,我正在尝试使用一些数学逻辑而不是使用 ToString().Length。我没有对这两种方法进行基准测试,但看过其他关于使用 System.Math.Floor(System.Math.Log10(number)) + 1 确定位数的帖子。似乎工作正常,直到我从 999999999999997 过渡到 999999999999998,此时,我开始得到不正确的计数。

有没有人遇到过这个问题?

我在 Why log(1000)/log(10) isn't the same as log10(1000)? 看到过类似的强调 Java 的帖子还有一个帖子@How to get the separate digits of an int number?这表明我如何使用 % 运算符但使用更多代码实现相同的效果

这是我用来模拟的代码

Action<ulong> displayInfo = number => 
Console.WriteLine("{0,-20} {1,-20} {2,-20} {3,-20} {4,-20}",
number,
number.ToString().Length,
System.Math.Log10(number),
System.Math.Floor(System.Math.Log10(number)),
System.Math.Floor(System.Math.Log10(number)) + 1);

Array.ForEach(new ulong[] {
9U,
99U,
999U,
9999U,
99999U,
999999U,
9999999U,
99999999U,
999999999U,
9999999999U,
99999999999U,
999999999999U,
9999999999999U,
99999999999999U,
999999999999999U,
9999999999999999U,
99999999999999999U,
999999999999999999U,
9999999999999999999U}, displayInfo);

Array.ForEach(new ulong[] {
1U,
19U,
199U,
1999U,
19999U,
199999U,
1999999U,
19999999U,
199999999U,
1999999999U,
19999999999U,
199999999999U,
1999999999999U,
19999999999999U,
199999999999999U,
1999999999999999U,
19999999999999999U,
199999999999999999U,
1999999999999999999U
}, displayInfo);

提前致谢

帕特

最佳答案

log10 将涉及浮点转换 - 因此会出现舍入误差。对于 double 来说,误差很小,但对于精确的整数来说,误差就很大了!

排除 .ToString() 方法和浮点方法,那么是的,我认为您将不得不使用迭代方法,但我会使用整数除法而不是模数。

整数除以10,结果是否>0?如果是这样迭代。如果没有,停止。位数是所需的迭代次数。

例如。 5 -> 0; 1 次迭代 = 1 个数字。

1234 -> 123 -> 12 -> 1 -> 0; 4 次迭代 = 4 位数字。

关于c# - 获取无符号长整数中的位数c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4949386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com