• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

djthyrax

pow() - Algo se passa...

10 mensagens neste tópico

Tenho o seguinte código:

#include <stdio.h>
#include <math.h>

int main(){
printf("%i\n", pow(4, 2));
return 0;
}

Deveria mostrar 16, mas mostra 0.

djthyrax@dawn:~$ gcc -o test test.c

djthyrax@dawn:~$ ./test

0

djthyrax@dawn:~$

Any idea?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pow() devolve double...

(muito mais giro é não fazer includes e programar o pow para inteiros :D)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(muito mais giro é não fazer includes e programar o pow para inteiros :D)

Done :P

#include <stdio.h>

int power(int base, int exp){
int temp = 1;
int i = 1;
for(; i <= exp; i++) temp *= base;
return temp;
}

int main(){
printf("%i\n", power(4, 2));
return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tive a pensar melhor, e lembrei-me que não preciso de 2 variáveis temporárias.

int power(int base, int exp){
int temp = 1;
for(; exp > 0; exp--) temp *= base;
return temp;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tive a pensar melhor, e lembrei-me que não precisas de NENHUMA variável temporária.

int power(int base, int exp){
       if (exp==0) return 1;
        exp+=base*10000;
for(; exp - 10000*(exp/10000) > 1; exp--) base *= (exp/10000);
return base;
}

lol... inventei... não ligues (só para expoentes pequeninos)

Peço imensa desculpa, na condição tem que ser >1 já que a base é logo inicializada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sem contar que a minha implementação só funciona para expoentes positivos. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sem contar que a minha implementação só funciona para expoentes positivos. :D

Implementação para expoentes naturais... Já é bem bom... Depois tinhas o mesmo problema de antes porque a maior parte dos expoentes negativos iam dar-te resultados não inteiros (todos os expoentes negativos diferentes de -1 :P)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faltava a conversão de double para int.

#include <stdio.h>
#include <math.h>

int main(){
printf("%i\n", (int) pow(4, 2));
return 0;
}

o printf espera um int mas encontra um double, provavelmente imprime 0 em todas estas situações...

é preferivel compilares com a flag -Wall para ligar quase todos os warnings. Neste caso obterias "a.c:5: warning: format '%i' expects type 'int', but argument 2 has type 'double'"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hmm acho que ele já tinha percebido qual era o problema :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora