其它语言算法思想也可
看看这个。
统计1到N之间所有十进制数中数字1的个数。
把数字变成字符数组。遍历不就可以了。
自己写了一段,不过不能计算x10^n次,目前只能计算110^n次
/**计算x乘10的n次方以内出现1的次数*/function calc(n){var number=n.toString();//数字转化成字符串var first=Number(number.slice(0,1));//拓展,用于计算x*10^n以内var len=(first>1?number.length:(number.length-1));if(len>1){//如果是2位数以上,递归计算console.log(fac(len,first));}else{//如果是1位数,则只有1个console.log(1);}}//递归函数,m表示要计算数字的长度,100代表m=2,k代表数字的首位function fac(m,k){if(m>1){if(k==1){return 10*fac(m-1,1)+Math.pow(10,m-1);}else{return k*fac(m-1,1)+Math.pow(10,m-1);}}else{return 1;}}calc(10);//=>1calc(20);calc(40);calc(100);//=>20calc(200);//=>140calc(1000);calc(10000);
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
看看这个。
统计1到N之间所有十进制数中数字1的个数。
把数字变成字符数组。遍历不就可以了。
自己写了一段,不过不能计算x10^n次,目前只能计算110^n次
/*
*计算x乘10的n次方以内出现1的次数
*/
function calc(n){
var number=n.toString();//数字转化成字符串
var first=Number(number.slice(0,1));//拓展,用于计算x*10^n以内
var len=(first>1?number.length:(number.length-1));
if(len>1){//如果是2位数以上,递归计算
console.log(fac(len,first));
}else{//如果是1位数,则只有1个
console.log(1);
}
}
//递归函数,m表示要计算数字的长度,100代表m=2,k代表数字的首位
function fac(m,k){
if(m>1){
if(k==1){
return 10*fac(m-1,1)+Math.pow(10,m-1);
}else{
return k*fac(m-1,1)+Math.pow(10,m-1);
}
}else{
return 1;
}
}
calc(10);//=>1
calc(20);
calc(40);
calc(100);//=>20
calc(200);//=>140
calc(1000);
calc(10000);