fork(6) download
  1. #include <stdio.h>
  2.  
  3. char add(char a, char b)
  4. {
  5. char r = 0;
  6. char n = 0;
  7. r |= (a & 0x1) ^ (b & 0x1);
  8. n = (a & 0x1) & (b & 0x1);
  9. r |= (((a >> 1) & 0x1) ^ ((b >> 1) & 0x1) ^ n) << 1;
  10. n = (((a >> 1) & 0x1) & ((b >> 1) & 0x1)) | (((a >> 1) & 0x1) & n) | (n & ((b >> 1) & 0x1));
  11. r |= (((a >> 2) & 0x1) ^ ((b >> 2) & 0x1) ^ n) << 2;
  12. n = (((a >> 2) & 0x1) & ((b >> 2) & 0x1)) | (((a >> 2) & 0x1) & n) | (n & ((b >> 2) & 0x1));
  13. r |= (((a >> 3) & 0x1) ^ ((b >> 3) & 0x1) ^ n) << 3;
  14. n = (((a >> 3) & 0x1) & ((b >> 3) & 0x1)) | (((a >> 3) & 0x1) & n) | (n & ((b >> 3) & 0x1));
  15. r |= (((a >> 4) & 0x1) ^ ((b >> 4) & 0x1) ^ n) << 4;
  16. n = (((a >> 4) & 0x1) & ((b >> 4) & 0x1)) | (((a >> 4) & 0x1) & n) | (n & ((b >> 4) & 0x1));
  17. r |= (((a >> 5) & 0x1) ^ ((b >> 5) & 0x1) ^ n) << 5;
  18. n = (((a >> 5) & 0x1) & ((b >> 5) & 0x1)) | (((a >> 5) & 0x1) & n) | (n & ((b >> 5) & 0x1));
  19. r |= (((a >> 6) & 0x1) ^ ((b >> 6) & 0x1) ^ n) << 6;
  20. n = (((a >> 6) & 0x1) & ((b >> 6) & 0x1)) | (((a >> 6) & 0x1) & n) | (n & ((b >> 6) & 0x1));
  21. r |= (((a >> 7) & 0x1) ^ ((b >> 7) & 0x1) ^ n) << 7;
  22. return r;
  23. }
  24.  
  25. char sub(char a, char b)
  26. {
  27. return add(a, add(~b, 1));
  28. }
  29.  
  30. char cmp(char a, char b, char c)
  31. {
  32. return (~(add(~add(a, b), add(c, 1)) >> 7)) & 0x1;
  33. }
  34.  
  35. char mask(char a)
  36. {
  37. return (a | a << 1 | a << 2 | a << 3 | a << 4 | a << 5 | a << 6 | a << 7);
  38. }
  39.  
  40. char ds(char *sum, char *d, char *r, char a, char b)
  41. {
  42. char c = cmp(*sum, b, a); *d = add(*d, c); *sum = add(*sum, b & mask(c)); *r = sub(*r, b & mask(c));
  43. }
  44.  
  45. char ds8(char *sum, char *d, char *r, char a, char b)
  46. {
  47. ds(sum, d, r, a, b); ds(sum, d, r, a, b); ds(sum, d, r, a, b); ds(sum, d, r, a, b);
  48. ds(sum, d, r, a, b); ds(sum, d, r, a, b); ds(sum, d, r, a, b); ds(sum, d, r, a, b);
  49. }
  50.  
  51. char ds128(char *sum, char *d, char *r, char a, char b)
  52. {
  53. ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b);
  54. ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b);
  55. ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b);
  56. ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b);
  57. }
  58.  
  59. char div(char a, char b, char *r)
  60. {
  61. char sum = 0, d = 0;
  62. *r = a;
  63. ds128(&sum, &d, r, a, b);
  64. return d;
  65. }
  66.  
  67. int main(void) {
  68. int a, b;
  69. char reminder, division;
  70. scanf("%d / %d", &a, &b);
  71. division = div(a, b, &reminder);
  72. printf("%d / %d = %d (%d)", a, b, division, reminder);
  73. return 0;
  74. }
  75.  
Success #stdin #stdout 0s 2296KB
stdin
30 / 5
stdout
30 / 5 = 6 (0)