Exemplo n.º 1
0
Arquivo: acm288.c Projeto: zhouer/ACM
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;
}
Exemplo n.º 2
0
Arquivo: acm288.c Projeto: zhouer/ACM
Number pre2() {
	Number result = pre1();
	Number n;

	if (accept(TOKEN_POW)) {
		get_token();
		n = pre2();
		result = big_pow(result, get_int(n));
	}

	return result;
}
Exemplo n.º 3
0
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--;
    }
}