金融界2025年8月12日消息,国家知识产权局信息显示,西安热工研究院有限公司、华能集团技术创新中心有限公司、西安西热控制技术有限公司取得一项名为“一...
2025-08-13 0
你以为计算一个数的n次方很简单?随手写个循环相乘就行?但在面试中,这个看似基础的问题,却能刷掉一半以上的候选人。今天我们就来聊聊,如何写出既高效又安全的次方计算函数。
先看一个"想当然"的错误代码:
def power(base, exponent): result = 1 for i in range(exponent): result *= base return result
这段代码至少有三个严重问题:
解决这个问题需要分三步走:
class Solution {public: double Power(double base, int exponent) { // 处理底数为0的情况 if (equal(base, 0.0)) { return 0.0; } // 处理负指数:转为正数计算 unsigned int absExponent = 0; if (exponent > 0) { absExponent = (unsigned int)(exponent); } else { absExponent = (unsigned int)(-exponent); } // 计算正指数的结果 double result = PowerWithUnsignedExponent(base, absExponent); // 负指数则取倒数 if (exponent < 0) { result = 1.0 / result; } return result; }private: // 安全比较两个浮点数是否相等 bool equal(double num1, double num2) { if (num1 - num2 > -0.0000001 && (num1 - num2) < 0.0000001) { return true; } else { return false; } } // 高效计算正整数指数(二分法) double PowerWithUnsignedExponent(double base, unsigned int exponent) { if (exponent == 0) { return 1; } if (exponent == 1) { return base; } // 递归计算一半的指数(exponent >> 1 等价于 exponent / 2) double result = PowerWithUnsignedExponent(base, exponent >> 1); result *= result; // 如果指数是奇数(exponent & 0x1 等价于 exponent % 2) if (exponent & 0x1 == 1) { result *= base; } return result; }};
# -*- coding:utf-8 -*-class Solution: def Power(self, base, exponent): # 处理底数为0的情况 if base == 0: return 0.0 # 标记指数是否为负数 is_negative = False result = 1 if exponent < 0: is_negative = True # 计算绝对值的次方 for i in range(abs(exponent)): result *= base # 负指数则取倒数 if is_negative: result = 1 / result return result
这道题看似简单,却能考察三个重要能力:
下次再遇到类似问题,记得先别急着写代码,先在脑子里把各种特殊情况过一遍,再思考有没有更高效的算法。这种思维方式,才是面试官真正想考察的。
相关文章
金融界2025年8月12日消息,国家知识产权局信息显示,西安热工研究院有限公司、华能集团技术创新中心有限公司、西安西热控制技术有限公司取得一项名为“一...
2025-08-13 0
天眼查显示,近日,厦门索索奇科技有限公司成立,法定代表人为林舒宁,注册资本200万美元,由中国人工智能科技研发集团有限公司全资持股。序号股东名称持股比...
2025-08-13 0
直播吧8月12日讯 滑雪运动员谷爱凌更新了社媒,她晒成了一组九宫格照片。谷爱凌晒出了自己在北京的照片,并配文写道:我爱北京❤️。...
2025-08-13 0
发表评论