Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- char * sb(char *a, char *b, short n, char *res)
- {
- if (!((n > 1 && n < 11) || n == 16))
- {
- printf("Invalid numeric system\n");
- return NULL;
- }
- if (a[0] == '0')
- {
- printf("Invalid a[0]!=0\n");
- return NULL;
- }
- //struct operation op;
- //buildoperation(a, b, n, res, &op, SUB);
- long alen = 0 - (a - strchr(a, '\0'));
- long blen = 0 - (b - strchr(b, '\0'));
- if (alen < blen)
- {
- printf("Invalid a>=b\n");
- return NULL;
- }
- else if (alen == blen)
- {
- for (long l = 0; l < alen; l++)
- {
- if (a[l] == b[l])
- {
- if (l == alen - 1)
- {
- res = "0\0";
- return res;
- }
- continue;
- }
- else if (a[l] > b[l])
- {
- break;
- }
- else
- {
- printf("Invalid a>=b\n");
- return NULL;
- }
- }
- }
- long rlen = alen;
- alen -= 1;
- blen -= 1;
- res[rlen] = '\0';
- rlen -= 1;
- for (long l = 0, p = rlen + 1; l < p; l++, alen--, blen--, rlen--)
- {
- short r = n;
- short aa = (a[alen] >= '0' && a[alen] <= '9') ? (a[alen] - '0') : (a[alen] - 'A' + 10);
- short bb =
- (blen >= 0 ?
- ((b[blen] >= '0' && b[blen] <= '9') ? (b[blen] - '0') : (b[blen] - 'A' + 10))
- : 0);
- if (aa >= bb)
- {
- r = aa - bb;
- res[rlen] = (r < 10) ? ('0' + r) : ('A' + r - 10);
- }
- else /////здесь сбой
- {
- long ll = alen;
- do
- {
- ll--;
- if (a[ll] == '0')
- a[ll] = (n < 11) ? ('0' + n - 1) : ('A' + n - 10 - 1);
- }
- while (a[ll] == '0');
- a[ll] =
- (n < 11) ?
- (a[ll] - 1)
- : ((a[ll] == 'A') ? '9' : (a[ll] - 1));
- aa = (n < 11) ? (n + aa) : (10 + aa);
- r = aa - bb;
- res[rlen] = (r < 10) ? ('0' + r) : ('A' + r - 10);
- } ////////
- }
- if (res[0] == '0')
- {
- rlen = 0 - (res - strchr(res, '\0'));
- for (long l = 0; l < rlen; l++)
- {
- res[l] = res[l + 1];
- }
- }
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement