public int numOf2s(int n) {
		// Ending condition:
		if (n == 0) {
			return 0;
		}
		// get the top digit
		int top = new Integer(n).toString().toCharArray()[0] - '0';
		int numOfDigits = new Integer(n).toString().length();// String.getLength()???
		int next = n - top * (int) Math.pow(10, numOfDigits - 1);
		int nines=(int)Math.pow(10,numOfDigits-1)-1;
		
		//F(X235)=>
		//if x==1, return F(235)+F(999)
		//if x==2, return 235+1+F(999)*2
		//if x==3~9, return F(235)+1000+F(999)*(x-1)
		if(top==1){
			return numOf2s(next)+numOf2s(nines);
		}
		if(top==2){
			return next+1+2*numOf2s(nines);
		}
		else{
			return numOf2s(next)+nines+1+numOf2s(nines)*(top-1);
		}
	}