我需要得到结果pow(a,b)
作为整数(a 和 b 也是整数)。目前,计算中(int) pow( (double)a, (double)b)
包含错误。一个函数可以是什么,它可以对整数执行 pow(a,b) 并返回一个整数?
但奇怪的是:我在 Linux 中使用以下命令编写了脚本Geany https://en.wikipedia.org/wiki/Geany (and g++
/GCC https://en.wikipedia.org/wiki/GNU_Compiler_Collection编译器)并且刚刚pow(a,b)
该脚本编译并运行良好。
但在大学里我有Dev-C++ https://en.wikipedia.org/wiki/Dev-C%2B%2B(和微软Windows)。在 Dev-C++ 中,脚本未编译并出现错误,
[警告]从 double 转换为 'int'
我需要让这个脚本在 Windows 下工作(以及MinGW https://en.wikipedia.org/wiki/MinGW编译器)也是如此。
比 Zed 更好的递归方法。
int myPow(int x, unsigned int p)
{
if (p == 0) return 1;
if (p == 1) return x;
int tmp = myPow(x, p/2);
if (p%2 == 0) return tmp * tmp;
else return x * tmp * tmp;
}
复杂度为 O(log²(p)) 而不是 O(p)。
Or as a constexpr
使用 c++17 的函数。
template <unsigned int p>
int constexpr IntPower(const int x)
{
if constexpr (p == 0) return 1;
if constexpr (p == 1) return x;
int tmp = IntPower<p / 2>(x);
if constexpr ((p % 2) == 0) { return tmp * tmp; }
else { return x * tmp * tmp; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)