Number big_pow(Number base, int exp) { Number result; result.digits = (int *)malloc(sizeof(int) * 65536); if (base.length == 1 && base.digits[0] == 0) { result.sign = 1; result.length = 1; if (exp == 0) { result.digits[0] = 1; } else { result.digits[0] = 0; } return result; } else if (exp == 0) { result.sign = 1; result.digits[0] = 1; result.length = 1; return result; } else if (exp == 1) { return base; } result = big_pow(base, exp / 2); result = big_mul(result, result); if (exp % 2 == 1) { result = big_mul(result, base); } return result; }
Number pre2() { Number result = pre1(); Number n; if (accept(TOKEN_POW)) { get_token(); n = pre2(); result = big_pow(result, get_int(n)); } return result; }
void my_putnbr_base(int nbr, char *base, int taille) { int base_size; int i; int puissance; if (nbr < 0) { my_putchar('-'); nbr = nbr * (-1); } base_size = my_strlen(base); i = taille >= 0 ? taille : big_pow(nbr, base_size); while (i >= 0) { puissance = nbr / power(base_size, i); my_putchar(base[puissance]); nbr = nbr - puissance * power(base_size, i); i--; } }