1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| char *do_sub(char *n1, char *n2, t_base *base)
{
char *result;
unsigned int i;
int retenu;
int retenutmp;
int val;
n1 = my_revstr(n1);
n2 = my_revstr(n2);
retenu = 0;
retenutmp = 0;
i = 0;
result = malloc(sizeof(*result) * (BIGEST(my_strlen(n1), my_strlen(n2)) + 1));
while (i < my_strlen(n1) || i < my_strlen(n2))
{
if (i < my_strlen(n2))
{
retenu = DIF(convb(n1[i], base->base), (convb(n2[i], base->base) - retenutmp));
val = (convb(n1[i], base->base) + (retenu * base->size)) - (convb(n2[i], base->base) + retenutmp * base->size);
}
else
{
retenu = DIF(convb(n1[i], base->base), retenutmp);
val = (convb(n1[i], base->base) + (retenu * base->size)) - retenutmp * base->size;
}
retenutmp = retenu;
result[i++] = base->base[val % base->size];
}
if (retenu)
{
result[i++] = base->base[retenu * base->size];
}
result[i] = '\0';
result = my_revstr(result);
return (result);
} |
Partager