gpt4 book ai didi

c# - 如何获得 int (C#) 中的第一个数字?

转载 作者:IT王子 更新时间:2023-10-29 03:39:47 24 4
gpt4 key购买 nike

在 C# 中,获取 int 中第一个数字的最佳方法是什么?我想出的方法是把int转成字符串,找到字符串的第一个字符,然后把它转回int。

int start = Convert.ToInt32(curr.ToString().Substring(0, 1));

虽然这样可以解决问题,但感觉可能有一个很好的、简单的、基于数学的解决方案来解决这样的问题。字符串操作感觉很笨拙。

编辑:不管速度差异如何,mystring[0] 而不是 Substring() 仍然只是字符串操作

最佳答案

基准

首先,您必须确定“最佳”解决方案的含义,当然,这要考虑算法的效率、可读性/可维护性以及 future 出现错误的可能性。但是,仔细的单元测试通常可以避免这些问题。

我将这些示例中的每一个都运行了 1000 万次,结果值是已通过的 ElapsedTicks 的数量。

事不宜迟,从最慢到最快的算法是:

转换为字符串,取第一个字符

int firstDigit = (int)(Value.ToString()[0]) - 48;

结果:

12,552,893 ticks

使用对数

int firstDigit = (int)(Value / Math.Pow(10, (int)Math.Floor(Math.Log10(Value))));

结果:

9,165,089 ticks

循环

while (number >= 10)
number /= 10;

结果:

6,001,570 ticks

条件

int firstdigit;
if (Value < 10)
firstdigit = Value;
else if (Value < 100)
firstdigit = Value / 10;
else if (Value < 1000)
firstdigit = Value / 100;
else if (Value < 10000)
firstdigit = Value / 1000;
else if (Value < 100000)
firstdigit = Value / 10000;
else if (Value < 1000000)
firstdigit = Value / 100000;
else if (Value < 10000000)
firstdigit = Value / 1000000;
else if (Value < 100000000)
firstdigit = Value / 10000000;
else if (Value < 1000000000)
firstdigit = Value / 100000000;
else
firstdigit = Value / 1000000000;

结果:

1,421,659 ticks

展开和优化的循环

if (i >= 100000000) i /= 100000000;
if (i >= 10000) i /= 10000;
if (i >= 100) i /= 100;
if (i >= 10) i /= 10;

结果:

1,399,788 ticks

注意:

每个测试调用Random.Next()来获取下一个int

关于c# - 如何获得 int (C#) 中的第一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/701322/

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