返回
算法进阶之有效数字:清晰理解6个部分,攻克前端刷题难关
前端
2023-11-24 12:49:33
前言:
在前端开发的征途中,刷题是不可或缺的磨砺。而算法进阶的道路上,“有效数字”是一个绕不开的话题。本文将以第65题为切入点,通过深入剖析有效数字的6个组成部分,结合题目解析和示例代码,为你提供清晰易懂的刷题指南,助力算法进阶。
有效数字的6个组成部分:
- 整数: 整数部分位于小数点之前,如果没有整数部分,则默认为0。
- 小数: 小数部分位于小数点之后,如果没有小数部分,则默认为0。
- 科学计数法符号(e或E): 用于表示指数,表示小数点需要移动的位数。
- 指数符号: 位于科学计数法符号之后,表示小数点需要移动的位数。指数可以是正数或负数。
- 尾随0: 在小数部分末尾的0,表示小数部分的精度。
- 非尾随0: 在小数部分非末尾的0,表示小数部分的精度。
题目解析:
题号65:有效数字
给定一个数字,将它表示为有效数字的形式。
示例:
- 输入:"123.45"
- 输出:"1.2345e+02"
思路:
- 分离整数和小数: 将数字拆分成整数和小数部分。
- 处理小数: 如果小数部分为0,则无需处理。否则,去掉尾随0,并将小数点移动相应的位数。
- 判断指数符号: 如果小数点移动了正数位,则指数符号为“e+”,否则为“e-”。
- 拼接有效数字: 将整数、小数、科学计数法符号和指数符号拼接起来即可得到有效数字。
示例代码:
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个组成部分,并结合题目解析和示例代码,你可以攻克前端刷题的难关,不断提升自己的算法进阶之路。