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;
- }
- }
- }
- res[alen] = '\0';
- alen -= 1;
- blen -= 1;
- short m = 0;
- for ( ; alen >= 0; alen--, blen--)
- {
- 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 (m == 1)
- {
- if (aa == 0)
- {
- a[alen] = (n < 11) ? ('0' + n - 1) : ('A' + n - 10 - 1);
- }
- else
- {
- a[alen] =
- (n < 11) ?
- (a[alen] - 1)
- : ((a[alen] == 'A') ? '9' : (a[alen] - 1));
- m = 0;
- }
- }
- if (aa >= bb)
- {
- aa = aa - bb;
- }
- else
- {
- m = 1;
- aa = (n < 11) ? (n + aa) : (10 + aa);
- aa = aa - bb;
- }
- res[alen] = (aa < 10) ? ('0' + aa) : ('A' + aa - 10);
- }/*
- if (res[0] == '0')
- {
- alen = 0 - (res - strchr(res, '\0'));
- long l = 0;
- while (res[l] == '0')
- {
- l++;
- }
- for (long ll = 0; ll < alen; ll++)
- {
- res[ll] = res[ll + l];
- }
- }*/
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement