fork download
  1. int nextUnit(int u) {
  2. // implement u * 10 using addition.
  3. int unit = u + u + u;
  4. return unit + unit + unit + u;
  5. }
  6.  
  7. int digitSum(int x) {
  8. int units[24] = {0};
  9. units[0] = 1;
  10. int column = 0;
  11.  
  12. while (units[column] < x) {
  13. column++;
  14. units[column] = nextUnit(units[column - 1]);
  15. }
  16.  
  17. int sum = 0;
  18. while (x > 0) {
  19. if (x >= units[column]) {
  20. x -= units[column];
  21. sum++;
  22. } else {
  23. column--;
  24. }
  25. }
  26. return sum;
  27. }
  28.  
  29. int isDivBy9(int x)
  30. {
  31. if (x == 0) {
  32. return x == 0;
  33. }
  34. if (x < 0) {
  35. x = -x;
  36. }
  37.  
  38. int sum = digitSum(x);
  39.  
  40. if (sum < 10) {
  41. return sum == 9;
  42. }
  43.  
  44. return isDivBy9(sum);
  45.  
  46. }
  47.  
  48. int main() {
  49. for (int i=-10000; i < 1000000; ++i) {
  50. if (isDivBy9(i) != (i%9 == 0)) {
  51. return 1;
  52. }
  53. }
  54. return 0;
  55. }
  56.  
Success #stdin #stdout 0.39s 2048KB
stdin
Standard input is empty
stdout
Standard output is empty