javascript - 对负数的位数求和
问题描述
'编写一个名为 sumDigits 的函数,该函数将一个数字作为输入并返回该数字的每个小数位的总和。
如何将第一个数字为负数的数字相加?
例如:sumDigits(-32); // -3 + 2 = -1;
我能够部分解决它。
function sumDigits(number) {
return Math.abs(number).toString().split("").reduce(function(a, b) {
return parseInt(a) + parseInt(b);
}, 0);
}
console.log( sumDigits(-32) );
解决方案
简单的数学和递归可以轻松解决这个问题。
回想一下,当您将一个数字除以 10 时,余数是它的最右边的十进制数字,商的整数部分是由剩余数字组成的数字。换句话说:
let n = 5678;
console.log(n % 10); // => 8
console.log(Math.floor(n / 10)); // => 567
考虑到这一点,对数字求和是一个简单的递归过程:
程序(n)
- 将n除以10。
- 将数字设置为余数。
- 将n设置为商的整数部分。
- 如果n= 0,则返回digit。
- 否则,返回数字+过程(n)
保留最左边数字的符号会增加少量的复杂性,但不会太多。下面是它在 JavaScript 中的样子:
function digitSum(n, sign=1) {
if (n < 0) {
sign = -1; // Save the sign
n = Math.abs(n);
}
const digit = n % 10; // Remainder of |n÷10|
n = Math.floor(n / 10); // Integer part of |n÷10|
if (n === 0) {
return sign * digit; // No digits left, return final digit with sign
}
return digit + digitSum(n, sign); // Add digit to sum of remaining digits
}
console.log(digitSum(32)); // => 5
console.log(digitSum(-32)); // => -1
推荐阅读
- sql-server - 如何根据表 2 中的共享订单 ID 并受日期参数限制从表 1 中返回唯一 ID 的计数
- angular - 更新的代码在部署 Angular 4 后没有反映
- python - 从 MNIST 数据集中更改训练集和测试集的大小
- javascript - 有没有办法连接 req.body 请求?
- angular-cli - Angular `ng serve --prod` 和 `ng serve -c production` 一样吗?
- r - 如何使用查找表替换 data.table 列中的值?[R]
- symfony - 查询执行后 Apollo 客户端 + graphql + api-platform 错误
- java - 使用 AngularJS 和 Spring Boot 的 Websocket
- image-processing - 链码如何保持缩放不变?
- python - 如何在 y=-x 轴上镜像一个 numpy 矩阵?