Essentially this method involves an approximation step (that is based on "10x -x" but with an easier subtraction) followed by a correction step (that is based on the modulo 9 technique of "casting out nines").
Lets looks in detail at how your method works and why it might be easier for some people.
- The first step is to factor out the "10" from the "10x-x" method to give a numerically smaller subtraction. 9x = 10x - x = 10(x - x/10). This is exact but it requires subtracting a decimal, "x/10", and so holds no advantage.
- Replacing "x/10" with the approximation \lceil x/10 \rceil (ceiling function) gives the required simplification to the subtraction but results in an approximate answer, having a maximum error of 9.
- Finally the correction step uses the fact that the approx answer is always "under" by 0..9 to allow a correction by the "digit sum" modulo 9 method. See
http://en.wikipedia.org/wiki/Casting_out_nines
The only problem (as pointed out with MDR123's example above) is that the error is 0..9 and 0 and 9 are congruent modulo 9. In my opinion easiest way to get around this is just to stipulate that :
if any rounding up is performed by the ceiling function then the correction step must also add a strictly positive "modulo 9 correction". For example, in the "101*9" case given above we would not be able to stop at the preliminary "900" answer just because it's modulo 9 correct. Since \lceil 101/10 \rceil
did require a finite upward rounding then the preliminary answer of 900 must be corrected upward to the next modulo 9 consistent value of 909.