1.水仙花数
- 封装一个函数, 判断一个数字是否为 水仙花数
什么是水仙花数, 一个四位数字, 各个位置的四次方和!!! 四次方和!!! 四次方和 如果等于自身, 那么就是水仙花数
//1.封装一个函数
function fn(num){
//2.计算参数 num 接收到的四位数字,是否为水仙花数
/**
* 2.1拿到四位数字的各个位置上的数字
* 以1234为例子
* 想拿到千位数字的1 先让他缩小1000倍,然后通过parseInt取整
* parseInt(1234/1000) -> parseInt(1.234) -> 1
* 想拿到百位数字的2 先让他缩小100倍,然后通过parseInt取整,再加一个取余10
* parseInt(1234 / 100) % 10 -> parseInt(12.34) % 10 -> 12%10 -> 2
* 想拿到十位数字的3 先缩小10倍,然后取余10
* parseInt(1234 / 10) % 10 ->parseInt(123.4) % 10 -> 123 % 10 -> 3
* 想拿到个位数字4 直接用原数字取余10
* num % 10
*/
var qianW = parseInt(num / 1000)
var baiW = parseInt(num / 100) % 10
var shiW = parseInt(num / 10) % 10
var geW = num % 10
//2.2计算各个位置上的数字 的 四次方和
var sum = qianW ** 4 + baiW ** 4 + shiW ** 4 + geW ** 4 // ** 是ES6以后新推出的一个语法 4代表了计算这个数字的4次方 这个数字是几就是几次方
//2.3判断四次方和 是否等于 自身
if(sum === num){
// console.log('是水仙花数')
return true
}else{
// console.log('不是水仙花数')
return false
}
//最后一步:如果这个数字是水仙花数,返回一个true 否则返回false
}
var str = fn(1634)
console.log(str)//true
2.数字加密
封装一个函数, 对一个四位数字加密,加密规则:
1. 每一位上的数字 +5 然后使用 10的余数替代
2. 一三交换位置, 二四交换位置
举例:
输入 1234
1. 每一位上的数字 +5 ===> 6789
2. 使用 10 的余数代替 ===> 6789
3. 一三 二四 交换位置 ===> 8967
输入 5655
1. 每一位上的数字 +5 ===> 0100
2. 使用 10 的余数代替 ===> 0100
3. 一三 二四 交换位置 ===> 0001 (这里需要打印0001, 不能打印1)
function fn(num) {
if(num >=1000 && num <10000){
//对一个四位数字进行加密操作
//1.先拿到四位数字的各个位置上的值
var qianW = parseInt(num / 1000)
var baiW = parseInt(num / 100) % 10
var shiW = parseInt(num / 10) % 10
var geW = num % 10
//2.将这四个值,加5后,替换原本的值
qianW += 5
baiW += 5
shiW += 5
geW += 5
//3.将加5后的值使用余数去替代
qianW %= 10
baiW %= 10
shiW %= 10
geW %= 10
/**
* 4.一三交换位置, 二四交换位置
* 原始数字: qianW baiW shiW geW
* 4.1 一三交换位置: shiW baiW qianW geW
* 4.2 二四交换位置: shiW geW qianW baiW
*/
var numT = '' + shiW + geW + qianW + baiW
//最后一步,将加密后的数字,返回出去
return numT
}else{
console.log('传入的数字不是四位数')
}
}
var sum = fn(5655)
console.log('加密后的数字为:', sum)
3.最大公约数
封装一个函数, 求两个数字的最大公约数
function fn1(a,b){
//1.寻找两个参数中较小的值
var min = a > b ? b : a //如果a>b条件成立,说明b的值小,所以返回b,否则,说明a的值小,那么返回a
//2.找约数
for(var i = min; i >= 1 ; i--){
/**
* 假设min的值为8
* 那么i的值可能是 8 7 6 5 4 3 2 1
*/
if(a % i === 0 && b % i === 0)
//返回a和b的最大公约数
return i
/**
* 当第一次这个if 执行的时候,说明此时的变量i是参数a和b的公约数,并且是最大公约数
* 此时直接return i, return具有中断函数的能力(虽然现在写在循环中,那么他会中断循环,然后中断函数)
*/
}
}
var sum = fn1(10,20)
console.log(sum)
4.最小公倍数
//提前准备一个函数求最大公约数
function fn1(a,b){
var min = a > b ? b : a
for(var i = min; i >= 1 ; i--){
if(a % i === 0 && b % i === 0)
return i
}
}
function fn2(a,b){
/**
* 需要计算a 和b 的最小公倍数
* 一个数学公式:
* 两数的乘积 === 两数的最大公约数 * 两数的最小公倍数
* a * b === a和b的最大公约数 * a和b的最小公倍数
* 根据数学等式,做一个变换
* a*b / a和b的最大公约数 === a和b的最小公倍数
*/
//根据 数学等式完成代码
// var num1 = fn1(a,b)//这里的a和b其实就是fn2函数的两个形参,得到的值就是a和b的最大公约数
// var num2 = a * b / num1//计算最小公倍数
// return num2//将最小公倍数返回
return a * b / fn1(a,b)
}
var sum = fn2(8,12)
console.log(sum)//这里会输出 数字8和数字12的最小公倍数 24