Beispiel #1
0
void shrink(char *n, char *a, char *b, char **pa, char **pb) {
    char *sum = add_in(a, b);
    char **r = divide_strings_in(sum, "2");
    char *mid = r[0];
    char *mid2 = multiply_in(mid, mid);
    int cmp = compare(mid2, n);
    free(sum);
    free(r[1]);
    free(r);
    free(mid2);
    if (cmp == 0) {
        *pa = *pb = mid;
        free(a);
        free(b);
        return;
    } else if (cmp > 0) {
        *pa = a;
        *pb = mid;
        free(b);
        return;
    } else {
        *pa = mid;
        *pb = b;
        free(a);
        return;
    }
}
Beispiel #2
0
NODE *addpts(NODE * zero, int r, int c, int rr, int cc, int *node_ct)
{
    NODE *add_in();

    if (rr < nrows - 1) {
        if (!flag_get(seen, rr + 1, cc))
            zero = add_in(r, c, rr + 1, cc, zero, node_ct);
    }
    if (cc < ncols - 1) {
        if (!flag_get(seen, rr, cc + 1))
            zero = add_in(r, c, rr, cc + 1, zero, node_ct);
    }
    if (rr > 0) {
        if (!flag_get(seen, rr - 1, cc))
            zero = add_in(r, c, rr - 1, cc, zero, node_ct);
    }
    if (cc > 0) {
        if (!flag_get(seen, rr, cc - 1))
            zero = add_in(r, c, rr, cc - 1, zero, node_ct);
    }
    return (zero);
}
Beispiel #3
0
char *sqrt_string_in(char *n) {
    char *b = strdup("0");
    char *e = bound(n);
    while (1) {
        shrink(n, b, e, &b, &e);
        char *sum = add_in(b, "1");
        bool cmp = compare(b, e) <= 0 && compare(sum, e) >= 0;
        free(sum);
        if (cmp) {
            if (b != e) {
                free(e);
            }
            return b;
        }
    }
}