Dim72
Novembre 16, 2005, 2:29
1
Salut,
Voila, j’aimerais connaitre tous les nombres(<100000) qui on comme caracteristiques : 153 = 1³ + 5³ + 3³ = 153
Je ne sais pas trop comment m y prendre ? Existe t il une fonction qui separe les chiffre ou quelque chose comme ca ??
Merci beacoup
Tu peux utiliser le reste de la division entière de Valeur par 10. Attention le premier reste est la dernière valeur.
Exemple:
153 > 10 donc
153 / 10 = 15 * 10 + 3 -> 3
15 > 10 donc
15 / 10 = 1 * 10 + 5 -> 5
1 < 10 donc
on stocke 1
Après c’est une idée. Je ne sais pas si une fonction toute fait existe
Tu peux toujours fouiller par ici : http://www.acm.uiuc.edu/webmonkeys/book/c_guide/index.html
Dim72
Novembre 17, 2005, 3:13
3
Ok, je te remercie.
Devant mon ecran je ne voyait pas comment m y prendre mais devant une bonne vielle feuille de papier ca a ete.
Encore merci
Sinon tu peux utiliser sprintf() et la table ASCII:
char s[7]; // Inférieurs à 100000 tes nombres :paf:
sprintf(s, "%u\n", 153);
for(int i=0; i<strlen(s); i++) {
...
// s[i]-'0' te donne respectivement 1, 5 et 3.
}
bouh !! on fait pas i < strlen(s), on fait s[i] !
Bah comme ça je suis sûr de ne pas avoir des caractères à la noix comme dans ta signature :paf:
Sinon c’est vrai, c’est mieux s[i] :jap:
Les tableaux de char ascii. Pire encore, tableaux de nombre == [0-9.-]
et strlen(s) à chaque itération spa le top tu transforme la compléxite en O(n*n).
D’un autre coté pour ses algos je sais pas si la complexité est un enjeu majeur …
en fait si tu prend le pb a l’envers ça donne
#include <stdio.h>
#include <stdlib.h>
#define CUBE(n) (n*n*n)
int main(int argc, char *argv[])
{
long i[5];
long v,n;
for(i[0]=0;i[0]<10;i[0]++)
for(i[1]=0;i[1]<10;i[1]++)
for(i[2]=0;i[2]<10;i[2]++)
for(i[3]=0;i[3]<10;i[3]++)
for(i[4]=0;i[4]<10;i[4]++)
{
v=CUBE(i[0])+CUBE(i[1])+CUBE(i[2])+CUBE(i[3])+CUBE(i[4]);
n=i[0]*10000+i[1]*1000+i[2]*100+i[3]*10+i[4];
if(v==n)printf("%ld\n",v);
}
system("PAUSE");
return 0;
}
Dim72
Novembre 21, 2005, 6:02
10
Merci pour votre engouement a m’aider.
Mon programme tourne nickel.
Merci