介绍
在本项目中,你将学习如何实现一个函数,该函数可以将两个以字符串形式表示的大整数相加。这是在实际场景中常见的问题,因为 JavaScript 内置的数字数据类型在表示和进行极大数的算术运算时存在局限性。
任务
在本项目中,你将学习:
- 设置项目环境并创建必要的文件。
- 实现将两个以字符串表示的大数相加的逻辑。
- 使用提供的示例测试
addBigNum函数。 - 探索优化解决方案的方法(可选)。
成果
在本项目中,你将学习:
- 如何通过将大数表示为字符串来在 JavaScript 中处理大数。
- 处理边缘情况并确保加法操作正确性的技巧。
- 优化
addBigNum函数性能的策略。 - 编写可维护和可读代码的最佳实践。
设置项目环境
在这一步中,你将设置项目环境并为“大整数相加”项目创建必要的文件。
打开你喜欢的代码编辑器,并导航到
/home/labex/project目录。在
/home/labex/project目录中创建一个名为addBigNum.js的新文件。在
addBigNum.js文件中,添加以下代码作为起点:
/*
将两个以字符串形式表示的大数相加,并返回其和的字符串形式。
参数:
- num1: 表示第一个大数的字符串。
- num2: 表示第二个大数的字符串。
返回值:
- 表示两个输入数字之和的字符串。
*/
function addBigNum(num1, num2) {
// 你的实现代码写在这里
}
module.exports = addBigNum;
这段代码定义了 addBigNum 函数并导出它,以满足项目要求。
实现加法逻辑
在这一步中,你将实现将两个以字符串形式表示的大数相加的逻辑。
- 在
addBigNum函数中,首先将输入的字符串num1和num2转换为数字数组。
const digits1 = num1.split("").map(Number); // 将 num1 字符串转换为数字数组
const digits2 = num2.split("").map(Number); // 将 num2 字符串转换为数字数组
- 确保数组
digits1和digits2的长度相同,必要时在数组前面补零。
while (digits1.length < digits2.length) {
digits1.unshift(0);
}
while (digits2.length < digits1.length) {
digits2.unshift(0);
}
- 初始化一个
result数组来存储最终和的数字,并初始化一个carry变量来跟踪加法过程中的进位值。
const result = [];
let carry = 0; // 加法中的进位值
- 从右到左遍历数字,执行加法并更新
carry值。
for (let i = digits1.length - 1; i >= 0; i--) {
const sum = digits1[i] + digits2[i] + carry;
const digit = sum % 10; // 当前数字值
carry = Math.floor(sum / 10); // 计算进位
result.unshift(digit); // 将当前数字添加到结果数组的开头
}
- 如果还有剩余的进位值,将其添加到
result数组的开头。
if (carry > 0) {
result.unshift(carry);
}
- 将
result数组转换为字符串并返回作为最终的和。
const sumStr = result.join(""); // 将结果数组转换为字符串
return sumStr;
测试 addBigNum 函数
在这一步中,你将使用提供的示例测试 addBigNum 函数。
- 在你的代码编辑器中,在
addBigNum.js文件的末尾添加以下代码:
// 测试 addBigNum 函数
console.log(addBigNum("0", "0")); // 输出:0
console.log(addBigNum("99", "1")); // 输出:100
console.log(addBigNum("11", "123")); // 输出:134
console.log(addBigNum("9007199254740992", "1")); // 输出:9007199254740993
- 保存
addBigNum.js文件并在终端中运行脚本:
node /home/labex/project/addBigNum.js
输出应与项目说明中的预期结果一致。
优化和完善解决方案(可选)
在这一可选步骤中,你可以探索进一步优化 addBigNum 函数的方法。一些潜在的改进包括:
- 处理负数或零作为输入。
- 提高处理极大数时的性能。
- 添加对无效输入的错误处理。
- 增强代码的可读性和可维护性。
你可以自由地尝试修改代码,并进行必要的改进以提升整体解决方案。
恭喜!你已经完成了“大整数相加”实验。如果你有任何问题或需要进一步的帮助,请随时提问。
总结
恭喜!你已经完成了这个实验。你可以在 LabEx 中练习更多实验来提升你的技能。



