1.计算1-100的和
function sun100(n) {
let result = 0;
for (let i = 1; i <= n; i++) {
result += i;
}
return result;
}
console.log(sun100(100));
function sum100_2(n) {
return n > 1 ? n + sum100_2(n - 1) : n;
}
console.log(sum100_2(100));
function sum100_3(n) {
return n * (n + 1) / 2;
}
console.log(sum100_3(100));
function sum100_4(n) {
let i = 1;
let sum = 0;
while (i <= n) {
sum += i;
i++;
}
return sum;
}
console.log(sum100_4(100));
// 2.求出1-1/2+1/3-1/4+1/…100的和
function makeSum() {
let end = 1;
let sum = 0;
for (let i = 1; i <= 100; i++) {
i % 2 === 0 ? end = -1 : end = 1;
sum += end / i;
}
return sum;
}
console.log(makeSum());
function makeSum_2() {
let i = 1;
let sum = 0;
while (i <= 100) {
if (i % 2 === 1) {
sum += 1 / i;
} else {
sum -= 1 / i;
}
i++;
}
return sum;
}
console.log(makeSum_2());
3.打印出1000-2000年中所有的闰年,并以每行四个数的形式输出
function printYear() {
let i = 1000;
let count = 0;
while (i <= 2000) {
if (i % 4 === 0 && i % 100 !== 0 || i / 400 === 0) {
if (count % 4 === 0 && count !== 0) {
console.log('/n');
}
console.log(i);
count++;
}
i++;
}
}
printYear();
4.打印100以内7的倍数
function print_7n() {
let i = 1;
while (i <= 100) {
if (i % 7 === 0) {
console.log(i);
}
i++;
}
}
print_7n();
5.打印100以内所有偶数的和
function Sum_ouShu() {
let i = 1;
let sum = 0;
while (i <= 100) {
if (i % 2 === 0) {
sum += i;
}
i++;
}
return sum;
}
console.log(Sum_ouShu());
6.判断一个数是不是素数
function isPrime(n) {
if (n < 2) {
return false;
} else {
if (n===2) return true;
for (let j = 2; j < n; j++) {
return j % n !== 0;
}
}
}
console.log(isPrime(9));
7.如何每间隔一秒输出from,到to的值
function printNumbers(from, to) {
//打印从from开始,但是to是不变的,但是因为参数是恒定的,所以我们需要声明一个变量来保存from,及让参数具有可变性...
let current = from;
//如何打印多次值呢?js中需要进行循环或者是递归才能输出多次,你这样直接if在最外面是不能让程序有循环性的。
setTimeout(function go() {
if (current < to) {
console.log(current);
setTimeout(go, 1000); // 嵌套使用setTimeout相当于递归,满足条件的情况下一直执行,不满足条件才会跳出,相当于让if具有了循环性。
}
current++; //改变条件
}, 1000);
}
printNumbers(3, 20);
function printNumbers(from, to) {
let current = from;
//创建重复调用定时器,并得到其唯一标识间隔的间隔 ID,当条件满足就清除定时器
let timeId = setInterval(() => {
console.log(current);
if (current === to) {
clearInterval(timeId);
}
current++;
}, 1000);
}
printNumbers(3, 10);
如果我们还希望函数立即运行,那么我们可以在单独的一行上添加一个额外的调用,像这样:
function printNumbers(from, to) {
let current = from;
function go() {
alert(current);
if (current == to) {
clearInterval(timerId);
}
current++;
}
go();
let timerId = setInterval(go, 1000);
}
printNumbers(5, 10);
8.实现pow(x,n) 实现 x 的 n 次幂
function pow(x, n) {
//使用一个内部变量保存x参数的值,不要直接使用x,比如3*3 =9, 9*3=27, 而不是比如x变为9,x*x = 81
let rr = x;
//for循环,使用循环来遍历n,从而实现n 个 x 相乘
// i 这里必须从1开始,而不是0,因为 0 * x = 0
for (let i = 1; i < n; i++) {
//每循环一次rr乘一次x
rr *= x;
}
return rr;
}
console.log(pow(2, 3));
function pow(x, n) {
return (n > 1) ? x * pow(x, n - 1) : x;
}
console.log(pow(2, 3));
9.数组连续最大和
function getMaxSubSum(arr) {
let subSum = 0;
for (let i = 0; i < arr.length; i++) {
let tmpSum = 0;
for (let j = i; j < arr.length; j++) {
tmpSum += arr[j];
subSum = Math.max(subSum, tmpSum);
}
}
return subSum;
}
console.log(getMaxSubSum([-1, 2, 3, -9]));
10.输出当月到之前12个月的‘xxxx年xx月’的数组
var _date=[],dateData=["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"];
//准备一个月份反转的数组
var dateDataRet=Object.assign([],dateData).reverse();
//获取当前年份
var yearText=new Date().getFullYear();
//获取当前月份 调试的时候,大家可以通过调整now调试 3月-now=2,12月now=11...
var now=new Date().getMonth();
for(let i=0;i<12;i++){
if(now-i<0){
//如果now-i<0,从dateDataRet里面拿数据,下标=|now-i|-1。
_date.push(yearText-1+'年'+dateDataRet[Math.abs(now-i)-1]);
}
else{
//从dateData里面拿数据,下标=now-i
_date.push(yearText+'年'+dateData[now-i]);
}
}
_date.reverse();