public int NumberOf1Between1AndN_Solution(int n) { int count=0; int level=10;//模10处理个位数 模100处理十位数 以此类推 while(10*n/level!=0){ int temp = (n%level)/(level/10);//当前要处理的位的值 if(temp>1) count+=(n/level+1)*level/10; if(temp==1) count+=(n%level-level/10+1)+(n/level)*level/10; if(temp==0) count+=(n/level)*level/10; level=10*level; } return count; }逐位找出1出现的次数,只是需要分当前位是0、1、大于1的情况讨论~