问题描述
给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数。
例如:N=2时 1,2出现了1个 “1” 。
N=12时 1,2,3,4,5,6,7,8,9,10,11,12。出现了5个“1”。
public class Main {
void solve(int n){
int count = 0;
for(int i=1;i<=n;i++){
int t = i;
while(t>0){
if(t%10==1) count++;
t /= 10;
}
}
System.out.println(count);
}
void solve2(int n){
int i = 1;
int before=0;//由i位前决定的1数目(高位)
int current = 0;//由i位决定的1数目
int after=0;//由i位后决定的1数目(低位)
int count = 0;
while((n/i)>0){
current = (n/i)%10;
before = n/i/10;
after = n - (n / i) * i;
if(current>1){
count = count + (before + 1) * i;
}else if (current == 0){
count = count + before * i;
}else if (current == 1){
count = count + before * i + after + 1;
}
i = i * 10;
}
System.out.println(count);
}
public static void main(String[] args) {
Main m = new Main();
m.solve(12013);
}
}