Ir para o conteúdo
djthyrax

pow() - Algo se passa...

Mensagens Recomendadas

djthyrax    11
djthyrax

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

(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;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

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;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mogers    14
mogers

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'"

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade