【问题标题】:Get individual digits from an Int without using strings?在不使用字符串的情况下从 Int 获取单个数字?
【发布时间】:2018-06-06 18:08:41
【问题描述】:

我知道您可以将 Int 转换为字符串并使用索引器获取位置 x 处的数字,就好像它是一个 char 数组一样,但是当您处理多个大数字时,这种转换会变得有点开销。

有没有办法在不将数字转换为字符串的情况下检索位置 x 处的数字?

编辑:

谢谢大家,我将对建议的方法进行基准测试,并检查它是否比转换为字符串更好。如果有人有更好的想法,线程将保持 24 小时无人回答。

编辑 2:

在对 ulong 数字进行一些简单测试后,我得出结论,与下面提供的方法相比,转换为字符串和提取数字可能会慢 50%,请参阅批准的答案。

【问题讨论】:

  • 数学上这是可能的,但我认为这不会比将其转换为字符串更开销
  • 您可以移位并将移位后的值转换为字符。
  • @sino:我肯定希望它比将其转换为字符串的开销更少。毕竟,转换为字符串需要做所有相同的操作构造字符串对象。此外,如果只需要一个数字,则 OP 可以在达到该数字时停止。
  • @sino:是什么让你产生了这个想法?与生成大量数字的字符串表示相比,一些简单的数学运算所需的开销(CPU 和内存资源)要少得多。

标签: c# type-conversion numbers int


【解决方案1】:

你可以这样做:

int ith_digit(int n, int i) {
    return (int) (n / pow(10, i)) % 10;
}

我们可以通过将数字减少到我们想要的数字变成一个位置的点来获得第 i 个数字,例如:

假设您想要 12345 中的第三个数字,然后通过将其减少到 123(将其除以 10 i 次),我们可以将该数字的余数除以 10 得到最后一个数字,即我们想要的数字。

【讨论】:

  • 这是解决问题的方法。如果您对它的工作原理提供更多解释,您可能会获得更多支持。
  • @JimMischel 我添加了解释 Jim,谢谢提醒!
猜你喜欢
  • 2012-05-10
  • 2019-06-11
  • 1970-01-01
  • 2023-03-18
  • 2011-06-22
  • 2010-09-15
  • 2012-05-24
  • 2017-04-01
  • 1970-01-01
相关资源
最近更新 更多