返回

算法进阶之有效数字:清晰理解6个部分,攻克前端刷题难关

前端

前言:

在前端开发的征途中,刷题是不可或缺的磨砺。而算法进阶的道路上,“有效数字”是一个绕不开的话题。本文将以第65题为切入点,通过深入剖析有效数字的6个组成部分,结合题目解析和示例代码,为你提供清晰易懂的刷题指南,助力算法进阶。

有效数字的6个组成部分:

  1. 整数: 整数部分位于小数点之前,如果没有整数部分,则默认为0。
  2. 小数: 小数部分位于小数点之后,如果没有小数部分,则默认为0。
  3. 科学计数法符号(e或E): 用于表示指数,表示小数点需要移动的位数。
  4. 指数符号: 位于科学计数法符号之后,表示小数点需要移动的位数。指数可以是正数或负数。
  5. 尾随0: 在小数部分末尾的0,表示小数部分的精度。
  6. 非尾随0: 在小数部分非末尾的0,表示小数部分的精度。

题目解析:

题号65:有效数字

给定一个数字,将它表示为有效数字的形式。

示例:

  • 输入:"123.45"
  • 输出:"1.2345e+02"

思路:

  1. 分离整数和小数: 将数字拆分成整数和小数部分。
  2. 处理小数: 如果小数部分为0,则无需处理。否则,去掉尾随0,并将小数点移动相应的位数。
  3. 判断指数符号: 如果小数点移动了正数位,则指数符号为“e+”,否则为“e-”。
  4. 拼接有效数字: 将整数、小数、科学计数法符号和指数符号拼接起来即可得到有效数字。

示例代码:

function validNumber(num) {
  // 将数字拆分成整数和小数部分
  const [integer, decimal] = num.toString().split('.');
  // 处理小数部分
  if (decimal) {
    // 去掉尾随0
    while (decimal[decimal.length - 1] === '0') {
      decimal = decimal.slice(0, -1);
    }
    // 拼接小数部分
    decimal = decimal ? '.' + decimal : '';
  }
  // 判断指数符号
  const exponentSign = decimal ? (decimal.length === 0 ? '+' : '-') : '';
  // 拼接指数部分
  const exponent = exponentSign + (decimal ? decimal.length : 0);
  // 拼接有效数字
  return `${integer}${decimal}e${exponent}`;
}

总结:

有效数字的拆解和理解是前端刷题中的重要一环。通过清晰掌握有效数字的6个组成部分,并结合题目解析和示例代码,你可以攻克前端刷题的难关,不断提升自己的算法进阶之路。