0

我正在尝试将 pep8 中的数字分解为千位,然后是代表百位的部分,然后是代表十位的部分,最后是代表个位的部分。

示例:数字 439 应该以这种方式分解为 0,4,3,9。

你有什么建议吗 ?

4

1 回答 1

1

数字 439 是如何存储的?它是一个字符串,还是以二进制形式存储在某处的数值?

你有什么限制?如果你知道这个数字总是 < 10,000 并且总是非负数,你可以做出一些简化的选择。

此外,您需要考虑是否需要数字 0、4、3、9 或字符串形式的“0439”。

以下帖子有很多很好的答案,特别是对于没有硬件划分或 mod 的小型处理器:  https ://electronics.stackexchange.com/questions/12618/fastest-way-to-get-integer-mod-10- and-integer-divide-10

有几种方法:

  1. 涉及除法或除以 10 的某些幂来提取单个数字的东西

    • 与上述类似,但使用减法、移位和其他方法将除法或模数替换为 10;这个答案显示了一种使用减法而不是除法从非负数中提取数字的简单方法 https://electronics.stackexchange.com/a/91940
  2. 将二进制数转换为 BCD;BCD 数字的每个十进制数字都是独立的。此类别或多或少将整数从二进制转换为 BCD,从中您可以相对简单地提取单个数字
    https://electronics.stackexchange.com/a/112455

您还可以搜索称为itoa— 表示整数到 ascii 的算法。如果您有一个单独的十进制数字被隔离(如上面的一些),它可以转换为 ascii 字符,例如用于打印,通过添加 48,这是 '0' 的 ascii 代码 - 数字零的可打印字符。这适用于 b/c 十进制数字的字符代码是连续的,因此 9 + 48 = 57,即“9”。

于 2021-10-05T18:16:14.017 回答