Advertisement
Guest User

Untitled

a guest
Jan 21st, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. char * sb(char *a, char *b, short n, char *res)
  2. {
  3. if (!((n > 1 && n < 11) || n == 16))
  4. {
  5. printf("Invalid numeric system\n");
  6. return NULL;
  7. }
  8. if (a[0] == '0')
  9. {
  10. printf("Invalid a[0]!=0\n");
  11. return NULL;
  12. }
  13. //struct operation op;
  14. //buildoperation(a, b, n, res, &op, SUB);
  15. long alen = 0 - (a - strchr(a, '\0'));
  16. long blen = 0 - (b - strchr(b, '\0'));
  17. if (alen < blen)
  18. {
  19. printf("Invalid a>=b\n");
  20. return NULL;
  21. }
  22. else if (alen == blen)
  23. {
  24. for (long l = 0; l < alen; l++)
  25. {
  26. if (a[l] == b[l])
  27. {
  28. if (l == alen - 1)
  29. {
  30. res = "0\0";
  31. return res;
  32. }
  33. continue;
  34. }
  35. else if (a[l] > b[l])
  36. {
  37. break;
  38. }
  39. else
  40. {
  41. printf("Invalid a>=b\n");
  42. return NULL;
  43. }
  44. }
  45. }
  46. long rlen = alen;
  47. alen -= 1;
  48. blen -= 1;
  49. res[rlen] = '\0';
  50. rlen -= 1;
  51. for (long l = 0, p = rlen + 1; l < p; l++, alen--, blen--, rlen--)
  52. {
  53. short r = n;
  54. short aa = (a[alen] >= '0' && a[alen] <= '9') ? (a[alen] - '0') : (a[alen] - 'A' + 10);
  55. short bb =
  56. (blen >= 0 ?
  57. ((b[blen] >= '0' && b[blen] <= '9') ? (b[blen] - '0') : (b[blen] - 'A' + 10))
  58. : 0);
  59. if (aa >= bb)
  60. {
  61. r = aa - bb;
  62. res[rlen] = (r < 10) ? ('0' + r) : ('A' + r - 10);
  63. }
  64. else /////здесь сбой
  65. {
  66. long ll = alen;
  67. do
  68. {
  69. ll--;
  70. if (a[ll] == '0')
  71. a[ll] = (n < 11) ? ('0' + n - 1) : ('A' + n - 10 - 1);
  72. }
  73. while (a[ll] == '0');
  74. a[ll] =
  75. (n < 11) ?
  76. (a[ll] - 1)
  77. : ((a[ll] == 'A') ? '9' : (a[ll] - 1));
  78. aa = (n < 11) ? (n + aa) : (10 + aa);
  79. r = aa - bb;
  80. res[rlen] = (r < 10) ? ('0' + r) : ('A' + r - 10);
  81. } ////////
  82. }
  83. if (res[0] == '0')
  84. {
  85. rlen = 0 - (res - strchr(res, '\0'));
  86. for (long l = 0; l < rlen; l++)
  87. {
  88. res[l] = res[l + 1];
  89. }
  90. }
  91. return res;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement