相关疑难解决方法(0)

获取整数最高十进制数的最快方法是什么?

什么是最快的实施方式

template <typename T>
unsigned highest_decimal_digit(T x);
Run Code Online (Sandbox Code Playgroud)

(返回例如3表示356431,7表示71表示,9表示9表示)?

我能想到的最好的是:

  • constexpr-计算适合T的"中等大小"10的幂.
  • 执行二进制搜索(超过10的幂,可能使用constexpr构造的查找表)来找到p,10的最高功率低于x.
  • 返回x除以p

......但也许有另一种方法.

笔记:

  • 我用C++ 14ish术语表达了问题和我的方法,并且代码中的解决方案会很好,但是抽象解决方案(甚至是x86_64汇编中的解决方案)都可以.我确实想要一些适用于所有(无符号)整数类型的东西.
  • 您可以忽略有符号整数类型.
  • 我没有说明"快"是什么,但请注意硬件.

algorithm integer bit-manipulation modulus integer-arithmetic

6
推荐指数
1
解决办法
199
查看次数

恒定时间长数的前N位数?

在Project Euler问题中,我需要处理可能有数百个数字的数字.我需要对前9位进行一些计算.

我的问题是:确定100位整数的前N位数的最快方法是什么?模数/余数的前N位数很容易.对于第一个数字,我可以按模数应用模数100次,或者我可以将数字转换为字符串并截断,但它们都是线性时间.有没有更好的办法?

algorithm numbers clojure

3
推荐指数
1
解决办法
2385
查看次数