整数相关方法
1. 获取整数位数
let length = 0;
while (num >= 1) {
num /= 10;
length++;
}
2. 获取整数各个位数
const num = 1234;
// 个位
let g = Math.floor(num / Math.pow(10, 0)) % 10;
// 十位
let s = Math.floor(num / Math.pow(10, 1)) % 10;
// 百位
let b = Math.floor(num / Math.pow(10, 2)) % 10;
// 千位
let q = Math.floor(num / Math.pow(10, 3)) % 10;
console.log(g, s, b, q); // 4 3 2 1
若num < 0
,可以先取反,再计算。
相关题目
1. 回文数(LeetCode - 9)
题目描述:
给你一个整数x
,如果x
是一个回文整数,返回true
;否则,返回false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121
是回文,而123
不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
我的解答:
let isPalindrome = function (x) {
if (x < 0) return false;
let num = x;
let length = 0;
while (num >= 1) {
num /= 10;
length++;
}
// console.log('length', length);
let count = length % 2 === 0 ? length / 2 : (length - 1) / 2;
// console.log('count', count);
for (let i = 0; i < count; i++) {
let font = Math.floor(x / Math.pow(10, length - 1 - i)) % 10;
let after = Math.floor(x / Math.pow(10, i)) % 10;
// console.log('font', font);
// console.log('after', after);
if (font !== after) return false;
}
return true;
};
2. 整数反转(LeetCode - 7)
题目描述:
给你一个 32 位的有符号整数x
,返回将x
中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231, 231 − 1]
,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
我的解答:
var reverse = function (x) {
const Max = Math.pow(2, 31) - 1;
const Min = -Math.pow(2, 31);
let isNega = false;
if (x < 0) {
x = -x;
isNega = true;
}
let num = x;
let length = 0;
while (num >= 1) {
num /= 10;
length++;
}
let stack = [];
for (let i = 0; i < length; i++) {
let n = Math.floor(x / Math.pow(10, i)) % 10;
stack.push(n);
}
let res = isNega ? parseInt('-' + stack.join('')) : parseInt(stack.join(''));
return res >= Min && res <= Max ? res : 0;
};