private void writeNumber(OutputStream out, int d, int w) { int q, n; switch (w) { case 4: writeDigit(out, q = d / 1000); d -= (q << 10) - (q << 4) - (q << 3); // d -= q * 1000 case 3: writeDigit(out, q = d / 100); d -= (q << 7) + (q << 2) - (q << 5); // d -= q * 100 case 2: writeDigit(out, q = d / 10); d -= (q << 3) + (q << 1); // d -= q * 10 case 1: writeDigit(out, d); break; default: n = 10000; w -= 4; while (--w > 0) n = (n << 3) + (n << 1); // n *= 10 while (n > 1) { writeDigit(out, q = d / n); d -= q * n; n /= 10; } writeDigit(out, d); } }