【发布时间】:2016-04-15 13:45:48
【问题描述】:
如何从不使用字符串的整数中快速删除尾随零?
例如,1000 必须变为 1,6789000 必须变为 6789。
简单的解决方案是重复以10^max_exponent、...、10000、1000、100、10(或相反的顺序)等除以取模,并将其与@987654330 进行比较@。
但是有人可以做得更快吗?
【问题讨论】:
-
预先制作一个表格,将所有数字映射到它们的值,并删除尾随零。所以
table[1000] => 1、table[1001] => 1001、table[1010] => 101、table[6789000] => 6789、table[6789001] => 6789001。对于任何数字 N,只需从表中返回第 N 个条目。非常快。 -
@HostileFork 如果 max_number 是 int64_t 类型,即 ~9*10^18 怎么办? :)
-
@vladon - 公平地说,他的方式很快,这正是你所要求的。
-
@vladon - 我知道,我是在讽刺!既然您不想使用查找表或 div/mod,为什么不向我们展示您目前的想法?
-
更多上下文可能会有所帮助。如果您以 10 为基数而不是计算机的本机以 2 为基数表示每个数字,以及一个额外的标记,您将立即得到答案。这将有助于了解上下文以及如何使用该数字。
标签: algorithm language-agnostic numbers