Conversion
amin009
Messages postés
121
Statut
Membre
-
toto -
toto -
Bonjour,
je declare une variable entier dans un prog c qui a pour but de deterniner le nombre de chiffres d'un entier ,
mais lorsque je saisi un entier >=32000 le programme affiche comme resultat 15, j'ai besoin d'une explication
merci.
je declare une variable entier dans un prog c qui a pour but de deterniner le nombre de chiffres d'un entier ,
mais lorsque je saisi un entier >=32000 le programme affiche comme resultat 15, j'ai besoin d'une explication
merci.
Configuration: Windows XP Firefox 2.0.0.18
A voir également:
- Conversion
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Conversion bytes en mo ✓ - Forum Webmastering
- Conversion mb/s en mo/s ✓ - Forum Matériel & Système
- 2k€ conversion - Forum Logiciels
- Conversion gif mp4 - Guide
7 réponses
Bonjour
L'explication, c'est que ton programme est mal fait.
Pour pouvoir te dire plus de détails, il faudrait que tu le montres.
La limite ne serait pas plutôt 32768 ?
L'explication, c'est que ton programme est mal fait.
Pour pouvoir te dire plus de détails, il faudrait que tu le montres.
La limite ne serait pas plutôt 32768 ?
Un programme qui donne de réponses correctes dans certains cas n'est PAS un programme correct s'il en donne des mauvaises dans d'autres cas.
Tu ne trouves pas ça évident ?
Tu ne trouves pas ça évident ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
#include <stdio.h>
void main()
{
int n,i,ch;
printf("donner un nombre";
scanf("%d",&n);
ch=0;
i=1;
while ( n/i !=0)
{ch=ch+1;
i=i*10;}
printf(""%d",ch);
}
void main()
{
int n,i,ch;
printf("donner un nombre";
scanf("%d",&n);
ch=0;
i=1;
while ( n/i !=0)
{ch=ch+1;
i=i*10;}
printf(""%d",ch);
}
Le problème c'est que tu travailles avec des entiers de 16 bits
quand tu es rendu à 5 chiffres, tu essayes ensuite une division par 100 000 pour tester s'il y a un sixième chiffre. Mais ta multiplication 10 000 par 10 ne te donne pas 100 000 (qui ne tient pas sur 16 bits) mais je ne sais quel nombre (tu peux le vérifier en faisant des print
Il serait beaucoup plus simple de diviser ton nombre par 10 à chaque tour, il n'y aurait jamais de débordement
quand tu es rendu à 5 chiffres, tu essayes ensuite une division par 100 000 pour tester s'il y a un sixième chiffre. Mais ta multiplication 10 000 par 10 ne te donne pas 100 000 (qui ne tient pas sur 16 bits) mais je ne sais quel nombre (tu peux le vérifier en faisant des print
Il serait beaucoup plus simple de diviser ton nombre par 10 à chaque tour, il n'y aurait jamais de débordement