不使用math.h库如何实现pow功能?自行编写的幂运算代码出错求助
代码修正方案
问题根因
- for循环的第三个参数设置了
marsennloop++,每次循环结束会自动对marsennloop执行加1操作,和循环体内marsennloop = marsennloop * 2的逻辑完全冲突,变量值变化不符合2的幂次递增的预期 - 循环终止条件
marsennloop <= calc的边界判断有误,会提前终止匹配逻辑
修正方案
如果你当前的需求是判断calc是否为梅森数(即满足calc = 2ⁿ -1的正整数),不需要通用幂运算能力,可直接调整为如下逻辑:
if (is_prime == 1) { marsenn = 0; unsigned int current_power = 1; while (current_power - 1 < calc) { current_power *= 2; if (current_power - 1 == calc && calc != 1) { marsenn = 1; break; } } }
如果需要通用的整数幂运算函数替代math.h的pow(仅支持正整数指数场景),可单独封装工具函数:
int int_pow(int base, int exp) { int res = 1; for (int i = 0; i < exp; i++) { res *= base; } return res; }
替换原有pow调用后的逻辑如下:
if (is_prime == 1) { marsenn = 0; for (int n = 1; ; n++) { int power_val = int_pow(2, n); marsenncalc2 = power_val - 1; if (marsenncalc2 > calc) { break; } if (marsenncalc2 == calc && calc != 1) { marsenn = 1; break; } } }
内容的提问来源于stack exchange,提问作者Punz
相关产品推荐
相关产品推荐

