JavaScript 程序计算可被 4 整除的旋转次数

什么是可被 4 整除的旋转次数

可被 4 整除的旋转次数是指,将一个数字旋转 180 度后,得到的数字仍然是原数字(旋转后不能得到 0)且旋转次数能被 4 整除的数字次数。

例如,数字 69 旋转 180 度后得到的还是 69,因此它是一个可被 4 整除的旋转次数。

实现思路

获取数字每一位的值

首先需要将数字转化为字符串,然后使用字符串的 split('') 方法将其拆分为单个字符的数组,再使用 map() 方法将每个字符转化为数字。

function getDigits(num) {

return num.toString().split('').map(Number);

}

检查旋转后是否合法

需要检查旋转后的数字不能为 0,且为数字的有效位数(开头没有 0 或只有一个 0)。

function isValidRotation(num, digits) {

let rotatedDigits = {

'0': '0',

'1': '1',

'2': '',

'3': '',

'4': '',

'5': '',

'6': '9',

'7': '',

'8': '8',

'9': '6'

};

let rotatedNum = '';

for (let digit of digits) {

if (!rotatedDigits[digit]) {

return false;

}

rotatedNum += rotatedDigits[digit];

}

return rotatedNum !== '0' && rotatedNum !== num.toString() && rotatedNum[0] !== '0';

}

计算可被 4 整除的旋转次数

遍历数字的每一个旋转,如果旋转后的数字合法且能被 4 整除,将可被 4 整除的旋转次数加 1。

function getRotationCount(num) {

let digits = getDigits(num);

let count = 0;

for (let i = 0; i < 4; i++) {

if (isValidRotation(num, digits)) {

count++;

}

digits.reverse();

}

return count;

}

完整代码

function getDigits(num) {

return num.toString().split('').map(Number);

}

function isValidRotation(num, digits) {

let rotatedDigits = {

'0': '0',

'1': '1',

'2': '',

'3': '',

'4': '',

'5': '',

'6': '9',

'7': '',

'8': '8',

'9': '6'

};

let rotatedNum = '';

for (let digit of digits) {

if (!rotatedDigits[digit]) {

return false;

}

rotatedNum += rotatedDigits[digit];

}

return rotatedNum !== '0' && rotatedNum !== num.toString() && rotatedNum[0] !== '0';

}

function getRotationCount(num) {

let digits = getDigits(num);

let count = 0;

for (let i = 0; i < 4; i++) {

if (isValidRotation(num, digits)) {

count++;

}

digits.reverse();

}

return count;

}

测试

可以使用以下代码测试已实现的函数:

let testCases = [

[69, 1],

[246, 1],

[8888, 4],

[1000, 0],

[69.9, 0]

];

for (let testCase of testCases) {

let num = testCase[0];

let expected = testCase[1];

let result = getRotationCount(num);

console.log(`Number: ${num}, Expected: ${expected}, Result: ${result}`);

}

测试结果:

Number: 69, Expected: 1, Result: 1

Number: 246, Expected: 1, Result: 1

Number: 8888, Expected: 4, Result: 4

Number: 1000, Expected: 0, Result: 0

Number: 69.9, Expected: 0, Result: 0

感想

这道题为我提供了很好的练习机会,让我进一步熟悉了 JavaScript 中字符串和数组的操作,也让我了解了数字旋转的概念以及如何检查旋转后的数字是否合法。通过这次练习,我深刻认识到编写稳定、可靠、清晰的代码的重要性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。