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)  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章