c# - 你如何在 C# 中进行 *integer* 求幂?

标签 c# math integer exponentiation

.NET 中内置的 Math.Pow() 函数将一个 double 基数提升为一个 double 指数并返回一个 结果。

对整数执行相同操作的最佳方法是什么?

补充:似乎可以将 Math.Pow() 结果转换为 (int),但这是否总是会产生正确的数字并且没有舍入错误?

最佳答案

一个相当快的可能是这样的:

int IntPow(int x, uint pow)
{
    int ret = 1;
    while ( pow != 0 )
    {
        if ( (pow & 1) == 1 )
            ret *= x;
        x *= x;
        pow >>= 1;
    }
    return ret;
}

请注意,这不允许负幂。我会把它留给你作为练习。 :)

已添加:哦,是的,差点忘了 - 还要添加上溢/下溢检查,否则您可能会遇到一些令人讨厌的意外。

关于c# - 你如何在 C# 中进行 *integer* 求幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/383587/

相关文章:

c# - 确定枚举值是否不是 C# 中的复合值

java - 倒坐标系中直线和矩形的直线裁剪算法?

java - Project Euler #10 Java 解决方案不起作用

javascript - 使用 Javascript 来提醒用户输入的最高和最低整数

mysql - 我应该在 Mysql 中将价格存储为小数还是整数?

c# - ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final 问题 - 编译器希望引用未找到的 7.0.0.0

C# - Powershell AddPSSnapin 导致错误

python - 求解三次方程

swift - Swift 中的最大公共(public)指数

c# - 显示用户控件而不是文本 MVVM 的组合框