在从1到n的正数中1出现的次数
来源:互联网 发布:矩阵如何正交化单位化 编辑:程序博客网 时间:2024/05/16 12:08
//f(3217)=3*f(999)+f(217)+10^3
//f(999)=10*f(99)+10^2,可以推导出fk9N,10^2表示100到199多出来的百位出现1的次数(100次)
//fk9N(int k)表示从k个9,"999...999"到1出现1的次数为"k*10^(k-1)"此方,fk9N(k)=10*fk9N(k-1)+10^(k-1)
//假设n=a*10^k+b,a为n的最高位,当a=0, f(n)=f(b);当a=1时,f(n)=fk9N(k-1)+f(b)+b+1,其中b+1表示10^k到n之间k位出现1的次数
//到a>1时,f(n)=a*fk9N(k-1)+f(b)+10^(k-1),10^(k-1)表示10^k到10^k+99...999(k个9)之间k位1的数量
//算法的复杂度为O(k),k为n的位数
int findOnefromOneToN(int n){
if(n<0) return -1;
int bits[10];
int nlength=0;
int nvalue=n;
for(int i=0;i<10;i++){
bits[i]=0;
}
while(nvalue){
bits[nlength]=nvalue%10;
nvalue=nvalue/10;
nlength++;
}
int count=0;
if(bits[0]!=0) count++;
nvalue=bits[0];
for(int i=1,int power=10;i<length;i++){
fi9N=i*power/10;
if(bits[i]==1)
count=fi9N+count+nvalue+1;
else if(bits[i]>1)
count=bits[i]*fi9N+count+power;
nvalue=bits[i]*power+nvalue;
power=10*power;
}
return count;
}
- 从1到N正数中1出现的次数
- 从1到n正数中1出现的次数
- 在从1到n的正数中1出现的次数
- 在从1到n的正数中1出现的次数
- 讨论google面试题 - 在从1到n的正数中1出现的次数
- 在从1到n的正数中1出现的次数
- 在从1到n的正数中1出现的次数
- 30、在从1到n的正数中1出现的次数
- 求在从1到n的正数中1出现的次数
- 在从1到n的正数中1出现的次数
- 在从1到n的正数中1出现的次数
- 在从1到n的正数中1出现的次数
- 在从1 到n 的正数中1 出现的次数
- 在从1到n的正数中1出现的次数
- 在从1到n的正数中1出现的次数
- 30.在从1到n的正数中1出现的次数(数组)
- 在从1到n的正数中1出现的次数[算法]
- 30.在从1到n的正数中1出现的次数
- DataGirdView存储过程分页 For Winfrom .
- CentOS下成功以rpm方式安装Mysql 5.5.13
- 用java实现文件下载的几种方法
- jquery 为整个页面绑定click事件,获得当前所在div
- 跨域访问控制
- 在从1到n的正数中1出现的次数
- Oracle RAC 分布式数据库系统简介
- flex as3开源组件
- 呃……csdn blog居然不支持Metaweblog了,是为自己的博客工具做技术壁垒吗
- SQL SERVER 用户自定义函数使用限制
- 3.3构造函数
- oracle RAC data guard 理论基础
- 习题2
- Cross-Scripting