JS入门小案例

计算第几天?

1,年份算是否是闰年,确认2月份的天数
2,得到每个月的天数,可以放数组里
3,根据月份得到当前月份的天数
4,根据日期加3得到的天数就ok了。

function isLeapYr(yr) {

    //判断闰年
    return (yr % 4 === 0 && yr % 100 !== 0) || (yr % 100 === 0 && yr % 400 === 0);

}

function count(y, m, d) {

    var mdays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var mSum = 0;
    var sum = 0;

    //如果是闰年的话,那么2月份就应该有29天
    isLeapYr(y) ? mdays[1] = 29 : mdays[1];

    //计算该月份之前的总天数,比如m=3,那么就计算1和2月的总天数
    for (var i = 0; i < m - 1; i++) {
        mSum += mdays[i];
    }

    //加上当月天数
    sum = mSum + d;

    return sum;
}
 //弹出年、月、日输入框,声明年鱼儿,并赋值
    var y =parseInt(prompt("请输入你的出生年份"));
    var m = parseInt(prompt("请输入你的出生月份"));
    var d =parseInt(prompt("请输入你的出生日期"));
    //月
    //求各月份数字之和
    var getMonth=new Array(31,28,31,30,31,30,31,31,30,31,30);
    var sum1=0,i;
    for(i=0;i<m-1;i++){
        sum1+=getMonth[i]
        }

    //年
    //判断年是否为闰年,是且大于2月份加一
        if(( y%400 ==0||(y % 4 == 0&& y%100 !=0))&& m > 2){
            sum=sum1 + d +1;
            document.write("该天为一年中的第"+sum+"天");
        }else{
            sum=sum1+d;
            document.write("该天为一年中的第"+sum+"天");
        }   

利用时间函数进行计算

var now = new Date();//输入日期以今日为例
var NewYearsDay = new Date(now.getFullYear(), 0, 0, 0, 0, 0);//该年第一天
console.log((now.getTime()-NewYearsDay.getTime())/86400000>>>0)//算出两者的时间戳之差就是时间差的微秒数  再用时间差除以天的微秒数86400000 取整 就是第几天
var endDate = new Date(y, m-1, d),
    startDate = new Date(y, 0, 0),
    days = (endDate - startDate) / 1000 / 60 / 60 / 24;

document.write("该天为一年中的第"+ days +"天");

JS实现阶乘

//while循环实现
function calNum(n) {
    var product = 1;
    while(n > 1){//1*5*4*3*21*n*(n-1)*(n-2)*...*2
        product *= n;
        n--;
    }
    return product;
}
console.log(calNum(5))
//for循环实现
   function calNum(n){
        var a = 1, str = '1*';
        for (var i = 2; i <= n; i++) {
            str += i + '*';
            a *= i;
        }
        str = str.substr(0,str.length-1);
        return str + '=' +a;
    }
    console.log(calNum(5));

判断素数

var prime = function(len){
    var i,j;
    var arr = [];

  for(i = 1; i < len; i++){
    for(j=2; j < i; j++){  
      if(i%j === 0) {
         break;
      }
    }

    if(i <= j && i !=1){
      arr.push(i);
    }

  }
  return arr;
};
console.log(prime(100));

js斐波那契数列求和

递归算法

时间复杂度为O(2^n),空间复杂度为O(n)

 function recurFib(n) {
  if (n < 2) {
    return n;
  }
  else {
    return recurFib(n-1) + recurFib(n-2);
  }
 }

  alert(recurFib(10));//将显示55

动态规划

时间复杂度为O(n),空间复杂度为O(n)

  function dynFib(n) {
     var res = [1,1];  
    if (n == 1 || n == 2) {
      return 1;
    }
      for (var i = 2; i < n; i++) {
        val[i] = val[i-1] + val[i-2];
      }
      return val[n-1];

  }
  alert(dynFib(10));//将显示55

迭代法

时间复杂度为O(n),空间复杂度为O(1)

 function iterFib(n){
  var last=1;
  var nextlast=1;
  var result=1;
  for(var i=2;i<n;i++){
    result=last+nextlast;
    nextlast=last;
    last=result;
  }
  return result;
 }

 alert(iterFib(10));//将显示55

质数

function foo(n){  
  var a=[],state=0;  
  for(var i=2;i<n;i++){  
    var sqrt_i = Math.sqrt(i);  
    if(i%sqrt_i===0){  
      continue;  
    }  
    for(var j=2;j<sqrt_i;j++){  
      if(i%j===0){  
        state=1;  
        break;  
      }else{  
        state=0;  
      }  
    }  
   if(state===0){  
     a.push(i);  
   }  
  }  
  console.log(a);  
}  
foo(100)  
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客岛的含笑

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值