当前位置: 面试刷题>> a b问题 (经典算法题500道)


### 题目描述补充 **题目:a b问题** 给定两个非负整数a和b(0 ≤ a, b ≤ 10^9),计算a^b(即a的b次幂)的结果,并以字符串形式返回。由于结果可能非常大,直接计算并存储为整数可能会导致溢出,因此以字符串形式返回是必要的。 **示例**: - 输入:a = 2, b = 10 - 输出:"1024" **注意**: - 考虑到性能,尽量避免使用库函数直接计算大数乘法或幂运算(尽管在某些语言中这些操作可能内置了优化)。 - 编写代码时,应考虑到内存和时间的效率。 ### PHP 示例代码 ```php function power($a, $b) { $result = "1"; $base = strval($a); while ($b > 0) { if ($b % 2 == 1) { $result = multiplyStrings($result, $base); } $base = multiplyStrings($base, $base); $b = intdiv($b, 2); } return $result; } function multiplyStrings($num1, $num2) { $m = strlen($num1); $n = strlen($num2); $result = array_fill(0, $m + $n, 0); for ($i = $m - 1; $i >= 0; $i--) { for ($j = $n - 1; $j >= 0; $j--) { $mul = intval($num1[$i]) * intval($num2[$j]); $p1 = $i + $j; $p2 = $i + $j + 1; $sum = $mul + $result[$p2]; $result[$p2] = $sum % 10; $result[$p1] += intval($sum / 10); } } $resultStr = ""; $i = 0; while ($i < count($result) && $result[$i] == 0) $i++; while ($i < count($result)) { $resultStr .= strval($result[$i++]); } return $resultStr == "" ? "0" : $resultStr; } // 示例使用 echo power(2, 10); // 输出:1024 ``` ### Python 示例代码 Python 的内建库支持大数运算,但为了符合题目要求,这里使用迭代方法手动实现: ```python def power(a, b): if b == 0: return "1" result = "1" base = str(a) while b > 0: if b % 2 == 1: result = multiply_strings(result, base) base = multiply_strings(base, base) b //= 2 return result def multiply_strings(num1, num2): m, n = len(num1), len(num2) result = [0] * (m + n) for i in range(m - 1, -1, -1): x = int(num1[i]) for j in range(n - 1, -1, -1): y = int(num2[j]) result[i + j + 1] += x * y result[i + j] += result[i + j + 1] // 10 result[i + j + 1] %= 10 # 去除前导零 i = 0 while i < len(result) and result[i] == 0: i += 1 return ''.join(map(str, result[i:])) or "0" # 示例使用 print(power(2, 10)) # 输出:1024 ``` ### JavaScript 示例代码 JavaScript 同样支持大数运算,但为了练习,我们手动实现: ```javascript function power(a, b) { if (b === 0) return "1"; let result = "1"; let base = a.toString(); while (b > 0) { if (b % 2 === 1) { result = multiplyStrings(result, base); } base = multiplyStrings(base, base); b = Math.floor(b / 2); } return result; } function multiplyStrings(num1, num2) { let m = num1.length; let n = num2.length; let result = Array(m + n).fill(0); for (let i = m - 1; i >= 0; i--) { for (let j = n - 1; j >= 0; j--) { let mul = parseInt(num1[i]) * parseInt(num2[j]); let p1 = i + j; let p2 = i + j + 1; let sum = mul + result[p2]; result[p2] = sum % 10; result[p1] += Math.floor(sum / 10); } } let resultStr = ""; for (let i = 0; i < result.length; i++) { if (result[i] !== 0) break; } for (let i = i; i < result.length; i++) { resultStr += result[i].toString(); } return resultStr || "0"; } // 示例使用 console.log(power(2, 10)); // 输出:1024 ``` **码小课**:在码小课网站中,你可以找到更多关于算法和数据结构的深入解析,以及更多编程实战项目,帮助大家提升编程能力。
推荐面试题