在 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 回答1.3k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
4 回答825 阅读
1 回答898 阅读
1 回答928 阅读
1 回答698 阅读
1 回答802 阅读
好吧,假设您知道整数的大小,最有效的方法是查找。应该比更短的基于对数的方法更快。如果您不关心计算“-”,请删除 + 1。