在 C++ 中确定整数中有多少位的一种非常 有效 的方法是什么?
原文由 Seth 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用它来计算 编译时 的位数:
C++20 解决方案:
template<std::integral auto num>
constexpr int number_of_digits = num >= -9 && num <= 9 ? 1 : 1 + number_of_digits<num / 10>;
适用于负数、零和正数。
注意:要使其与 C++14 一起使用,请将“std::integral auto”更改为“long long”。
注意:如果您希望负数中的减号也被计算在内,则将 -9 更改为 0;
使用示例:
int k = number_of_digits<101>; // k = 3
它的工作方式是一个数字将被递归地除以 10,直到它变成一个数字,在这种情况下,我们通过在总和上加上 +1 来完成。
原文由 Vegeta 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答3.4k 阅读
好吧,假设您知道整数的大小,最有效的方法是查找。应该比更短的基于对数的方法更快。如果您不关心计算“-”,请删除 + 1。