本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述
本题来自1281. 整数的各位积和之差
二、思路分析
n分解成每一位,转化成数字,累加、累乘。
三、AC代码
我这有5中解法,依次是:
1.reduce() 就是专门干累加/累乘这活儿的
var subtractProductAndSum = function (n) {
n = n.toString().split('');
return n.reduce((x, y) => (x * y)) - n.reduce((x, y) => (+x) + (+y));
};
复制代码
2.for遍历字符串
var subtractProductAndSum = function(n) {
let m = n.toString(10);
let multi = 1;
let sum = 0;
for(let i=0; i<m.length; i++) {
multi *= m[i];
sum += m[i]*1;
}
return multi - sum;
};
复制代码
3.for遍历 parseInt()字符串转化成数字
var subtractProductAndSum = function(n) {
var str = n.toString();
var sum = 0, total = 1;
for(let i = 0 ; i< str.length ; i++){
sum = sum + parseInt(str[i]);
total = total * parseInt(str[i]);
}
return total - sum;
};
复制代码
4.转化为数组 还是内味儿
var subtractProductAndSum = function(n) {
n = String(n).split("");
let add = 0;
let amass = 1;
for(let i in n) {
n[i] = parseInt(n[i]);
add += n[i];
amass *= n[i];
}
return amass - add;
};
复制代码
5.while、取余和Math.floor()
var subtractProductAndSum = function(n) {
let sum = 0;
let product = 1;
while (n > 0) {
digit = n % 10;
sum += digit;
product *= digit;
n = Math.floor((n /= 10));
}
return product - sum;
};
复制代码
四、总结
最近在深入了解reduce(),所以第一想法就是reduce(),2、3、4属于常规操作。
想着重提一下5:
数字拆分类型题目的三大杀器:while、取余和Math.floor
对10进行取余操作,每一步得到该位置上的数字
使用wihile循环直到取余结束
取余结束的终止条件这个根据不同题目进行不同的设定
最好不要使用parseInt(),如果数字太大和太小会出错,原理是该函数会将第一个参数首先转换成字符串再操作,其次第二个参数不同浏览器默认值不同,我们正常是传10,也就是十进制
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END