Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
- 给你一个整数
n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 - 示例 1:
- 输入: n = 234
- 输出: 15
- 解释:
- 各位数之积 = 2 * 3 * 4 = 24
- 各位数之和 = 2 + 3 + 4 = 9
- 结果 = 24 - 9 = 15
- 示例 2:
- 输入: n = 4421
- 输出: 21
- 解释:
- 各位数之积 = 4 * 4 * 2 * 1 = 32
- 各位数之和 = 4 + 4 + 2 + 1 = 11
- 结果 = 32 - 11 = 21
- 提示:
1 <= n <= 100000
二、思路分析:
- 第一种:字符串方法
- 首先定义两个变量,一个保存和,一个保存积
- 然后将给定的数字先转化成字符串,再将字符串切割成数组
- 遍历数组,将每一项强转类型为数字后累加和累乘
- 返回乘积减去和的结果
- 第二种:数学方法
- 数学方法就不用把数字转化成字符串,再把字符串转换成数字操作了
- 将给定的数字取余数,就是每次取数字的最后一位
- 然后累乘和累加
- 返回乘积减去和的结果
- 如:
n = 234- 第一次取余:
234 % 10,余数是4,商是23.4,我们商向下取整,商23,给n重新赋值,将这个余数4累加和累乘到变量中,sum = 0+4,product = 1 * 4 - 第二次
n=23,取余:23 % 10,余数是3,商是2.3,我们商向下取整,商2,给n重新赋值,将这个余数累加和累乘到变量中,sum = 0+4+3,product = 1 * 4 * 3 - 第二次
n=2,取余:2 % 10,余数是2,商是0,说明已经到最大一位了,执行完这次循环,退出,将这个余数累加和累乘到变量中,sum = 0 + 4 + 3 + 2,product = 1 * 4 * 3 * 2
- 第一次取余:
三、AC 代码:
- 第一种:字符串方法
function subtractProductAndSum(n: number): number {
let sum = 0;
let product = 1;
let str = n.toString().split('');
for(let i = 0; i < str.length; i++){
sum += Number(str[i]);
product *= Number(str[i]);
}
return product - sum
};
- 第二种:数学方法
function subtractProductAndSum(n: number): number {
let sum = 0;
let product = 1;
while(n > 0){
let num = n % 10;
n = Math.floor(n / 10);
sum += num;
product *= num;
}
return product - sum
};
四、总结:
- 题目简单难度,两种方式的执行时间和消耗内存一毛一样.....这不是巧了嘛
- 注意下定义保存累乘变量时,初始化需要从
1开始,如果定义从0开始,那这个乘积永远是0 - 更多解题方式,移步题解区