var za = function(n,len) { for (var i = 0; i < len; i++) { n += "0"; }; return parseInt(n); }; function nm(num,index,val) { if (arguments.length == 1) { if (typeof num == "number") { num += ""; index = 0; val = 0; if(num[index] > 2){ val += za(1,num.length-(index+1)); } else if(num[index] == 2){ val += 1; } return nm(num,index+1,val); }; } else if(arguments.length == 3){ if (index == num.length) { return val; } else{ var mxNum = 1,loopNum=0; for (var i = 1; i <= parseInt(num[index-1]); i++) { if (i != 2) { val += za(1,num.length-(index+1)); loopNum = (num[index] === '0' && num[index-1] > mxNum) ? 9 : num[index-1]; for (var j = 0; j < loopNum; j++) { val++; }; mxNum++; } }; return nm(num,index+1,val); } } }; var n = nm(300); console.log("val : ",n); for (var i = 0,test=0; i <= 300; i++){if((i+"").indexOf("2") >= 0){test++;}} console.log("result : ",test);



이런느낌?