整数的各位积和之差

439 阅读1分钟

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 + 2product = 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
  • 更多解题方式,移步题解区

image.png