#include <iostream>
using namespace std;
int getOne(int);
//求1~n之间出现1的个数,如f(1) = 1; f(13) = 6(1,10,11,12,13);,问f(n)=n中,n=?
//采用缓存机制提高效率,如计算101,f(101) = f(100) + 101有多少个1
int main(){
int n = 2;
int sum = 1;
while((sum + getOne(n)) != n){
sum += getOne(n);
n ++;
}
cout << n;
system("pause");
return 0;
}
//itoa( int value, char *string, int radix );
//第一个参数:你要转化的int;
//第二个参数:转化后的char*;
//第三个参数:你要转化的进制;
int getOne(int n){
//求n中有多少个1
int count = 0;
char c[20];
itoa(n, c, 10);
for(int i = 0; i < strlen(c); i ++){
if(c[i] == '1'){
count ++;
}
}
return count;
}