Pages : 1
#1 Le 18/05/2008, à 04:29
- Chiuchu
Maths -- Voyons si vous saurez répondre.
Salut,
je me pose une question toute bête de logique/mathématique depuis pas mal de temps, et je n'arrive pas à la résoudre.
Il s'agit, par un calcul, de savoir de combien de chiffres est composé un nombre X.
Prenons l'exemple de X = 45123. Il faut, par un calcul mathématique, retrouver 5.
Evidement, ce calcul sera applicable à toute valeur de X.
En termes plus scolaires, il s'agît de retrouver l'expression de la fonction qui à tout x associe son nombre de chiffres.
Dans le cas où ce serait impossible, démontrez en quoi.
Des propositions ?
+
Dernière modification par Chiuchu (Le 18/05/2008, à 04:40)
Hors ligne
#2 Le 18/05/2008, à 05:50
- bloublou
Re : Maths -- Voyons si vous saurez répondre.
python :
x = 45123
i = 0
while x:
i += 1
x /= 10
print i
c :
int main(void)
{
int i = 0;
int x = 45123;
while (x)
{
x /= 10;
i++;
}
printf("%d\n", i);
}
Bon, par contre, en maths j'en sais rien
Dernière modification par louizatakk (Le 18/05/2008, à 05:51)
Hors ligne
#3 Le 18/05/2008, à 06:12
- Astrolivier
Re : Maths -- Voyons si vous saurez répondre.
salut,
0.1 < (X / 10^y) < 1 ; y = entier naturel
ça doit être une histoire comme ça non ?
S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)
Hors ligne
#4 Le 18/05/2008, à 08:40
- Brunod
Re : Maths -- Voyons si vous saurez répondre.
Une autre perspective hors mathématique :
convertir en chaine de caractère et mesurer sa longueur donne le même résultat.
A adapter pour les - et ,
BD
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#5 Le 18/05/2008, à 08:54
- Poisson25
Hors ligne
#6 Le 18/05/2008, à 09:06
- Get-Get
Re : Maths -- Voyons si vous saurez répondre.
Je vois une méthode mathématique, mais qui nécessite un arrondi au supérieur.
Bref ca marche dans la plupart des cas, mais c'est pas super propre :
Appelons ton chiffre : constante "A"
On va le diviser par 10^x jusqu'à obtenir une valeur < 1. C'est a dire qu'on va utiliser la virgule comme un petit doigt qui va nous permettre de compter le nombre de chiffre :
Cela revient a résoudre : A/(10^x)<1
Rappelons juste une petite chose : log(10)=1 et log(10^x)=x*log(10) donc log(10^x)=x
A/(10^x) < 1
(10^x) > A
log(10^x) > log(A)
x*log(10) > log(A)
x>log(A)
On à donc x:"nombre de chiffre". x est strictement supérieur à log(A), mais doit être un entier positif.
Ainsi :
pour x>2.5 on prendra 3
pour x>2 on prendra 3 aussi car 3 est le premier entier supérieur à 2
Attention, cela ne fonctionne pas dans ces cas :
pour A [0;1] cela ne fonctionne pas.
pour A ]-infini;0[ la résolution est impossible.
-------------grilled par Poisson25 ---------------------:P
Edit n°2 : Demain je passe les maths de mon exam de BTS !!!:o
Vous me mettriez combien ?
Dernière modification par Get-Get (Le 18/05/2008, à 09:21)
Hors ligne
#7 Le 18/05/2008, à 09:53
- berserk
Re : Maths -- Voyons si vous saurez répondre.
ouh la vous me donnez mal à la tête
Hors ligne
#8 Le 18/05/2008, à 11:00
- sonal
Re : Maths -- Voyons si vous saurez répondre.
En termes plus scolaires, il s'agît de retrouver l'expression de la fonction qui à tout x associe son nombre de chiffres.
La solution de poisson25 (log) est la plus courte, mais si il s'agit de réaliser l'operation le plus rapidement possible, je me demande si un ordinateur n'irait pas plus vite en suivant la proposition de louizatakk ...
Sonal
Patience et longueur de temps, font plus que force, ni que rage
Hors ligne
#9 Le 18/05/2008, à 11:14
- Poisson25
Re : Maths -- Voyons si vous saurez répondre.
Chiuchu a écrit :En termes plus scolaires, il s'agît de retrouver l'expression de la fonction qui à tout x associe son nombre de chiffres.
La solution de poisson25 (log) est la plus courte, mais si il s'agit de réaliser l'operation le plus rapidement possible, je me demande si un ordinateur n'irait pas plus vite en suivant la proposition de louizatakk ...
Oui tu as raison, informatiquement la méthode de louizatakk est la plus simple. Le log pourrait être rapide si la librairie si elle était optimisée mais pour ce problème ça m'étonnerait qu'on y gagne beaucoup...
Tout ça pour compter le nombre de chiffres dans un nombre!
Hors ligne
#10 Le 18/05/2008, à 14:11
- Joss17
Re : Maths -- Voyons si vous saurez répondre.
C'est effectivement au niveau mathématique un calcul de logarithme.
Je ne suis pas convaincu que la méthode de louizatakk soit la plus rapide, il y a peut être un algorithme qui utiliserai des division par 2 qui pourrait être plus rapide.
Hors ligne
#11 Le 18/05/2008, à 14:18
- Joss17
Re : Maths -- Voyons si vous saurez répondre.
on pourrait stocker la valeur de Ln(10) / Ln(2) (qu'on appellerait C ) et utiliser l'algorithme de Louizatakk mais avec des divisions par 2 (plus rapide) puis retrouver le logaritme en multipliant par C.
Hors ligne
#12 Le 18/05/2008, à 14:30
- tenSe
Re : Maths -- Voyons si vous saurez répondre.
Il faut tout simplement chopper la partie entière du log.
Tu peux faire ça en maple en faisant log(nombre) puis en récupérant le résultat de la division euclidienne par 1 .
tenSe
( utilisateur d'Arch / CentOS / Ubuntu, intéressé par le traitement du signal temps réel et par les productions artistiques open source de toutes sortes )
Hors ligne
#13 Le 18/05/2008, à 20:50
- Chiuchu
Re : Maths -- Voyons si vous saurez répondre.
Salut,
Merci pour toutes ces réponses. Je dois donc faire l'arrondi supérieur du logarithme à base dix.
Ma prochaine question serait ... comment faire un arrondi supérieur en maths ?
Nan, j'rigole
Merci encore !
Hors ligne
#14 Le 18/05/2008, à 23:12
- bill_raise
Re : Maths -- Voyons si vous saurez répondre.
Sinon il n'y a pas moyen de faire ca avec des congruences?
Hors ligne
#15 Le 19/05/2008, à 10:50
- Nasman
Re : Maths -- Voyons si vous saurez répondre.
En assembleur il y a les opérations de logarithme qui permettent le calcul de:
log10(x)=log2(x).log10(2) avec x qui est un nombre flottant.
fldlg2 ;charge le logarithme de base 10 de 2
fld [adresse de la variable x]
fyl2x ;calcule le logarithme de base 2 de la variable et multiplie par log10(2)
Autrement il y a les moyens de faire des divisions entières par 10 (sans utiliser les log)
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#16 Le 19/05/2008, à 11:03
- tominardi
Re : Maths -- Voyons si vous saurez répondre.
en code, en passant l'entier en chaîne, ya les cardinal, en java au moins, et en C il me semble aussi ?
On a directement la longueur, pas de variable $i à utiliser.
Hors ligne
#17 Le 19/05/2008, à 13:03
- bloublou
Re : Maths -- Voyons si vous saurez répondre.
python
i = 45123;
print len(str(i));
ca marche.
Hors ligne
Pages : 1