sexta-feira, março 02, 2007

C experiments

Alguma vez pensaram em ler um numero da esquerda para a direita? É completamente anti-intuitivo!! Mas um computador é capaz de lhe achar bastante piada.

A ideia base é a seguinte:
o primeiro digito é o das unidades. x1
há mais?
entao o primeiro digito é o das dezenas e o segundo é o das unidades [ x1 * 10 + x2 ]
há mais?
entao o primeiro digito é o das centenas o segundo é o das unidades e o terceiro é o das unidades [ 10(x1*10 + x2) +x3] ...

and in C this would come has simple as

int atoi(char s[]){
int i , n ;
n=0;
for(i=0; s[i]>='0' && s[i]<='9';++i)
n = n*10 + (s[i]-'0');
return n;
}


s[i]-'0', justifica-se pelo facto de os caracteres '0','1','2'.. etc terem valores incrementalmente superiores. no meu caso '0'=48, '1'=49...etc


A vantagem?? bom para começar dispensa o uso de uma segunda funçao power, para computar as potencias de 10. Suponto o raciocinio mais comum de x = x1 + x2*10 + x3 * 10^2.... etc
Consequentemente o tempo de execução é menor porque o numero de "contas" que o cpu faz é menor.

Estou deliciada!

more to come soon lol or otherwise get Richie's "The C programing language" and go for it your self. It's fun!! ;)

1 comentário :

PMarques disse...

Bem...nunca li um post que não percebesse nadinha de nada!...Mas com certeza terás razão!... :-) E estar deliciado com isso dá que pensar!...como é possível? :p