数式の評価を原始的に #14

任意長非負整数から10進数表記の文字列表現を得る関数も。
基本的な骨格は10->256変換も256->10変換も変わりない。

...snip
char *mpi_make_decimal_expr(Mpi *mpi);
...snip
char *mpi_make_decimal_expr(Mpi *mpi)
{
    char *expr = malloc((size_t)(2.4082399654 * mpi->ndigit) + 1 + 1);
    size_t nexpr = 1, m = mpi->ndigit - 1, n;

    expr[0] = 0;
    do {
        unsigned int c = mpi->digit[m];
        size_t n = 0;
        do {
            c += expr[n] << 8;
            expr[n] = c % 10;
            c /= 10;
            n++;
        } while (n < nexpr);
        while (c > 0) {
            expr[n] = c % 10;
            c /= 10;
            n++;
        }
        nexpr = n;
    } while (m-- > 0);

    for (n = 0; n < nexpr / 2; n++) {
        size_t p = nexpr - n - 1, t = expr[n] + '0';
        expr[n] = expr[p] + '0';
        expr[p] = t;
    }
    if ((nexpr & 1) != 0) expr[nexpr / 2] += '0';
    expr[nexpr] = '\0';
    return expr;
}