Chiffres et nombres dans le texte
Convertir entre caractères et nombres, et calculer sur des nombres trop grands pour un int.
Ce que tu vas apprendre
- Convertir un caractère chiffre en valeur et inversement
- Construire un entier à partir de ses chiffres
- Calculer chiffre par chiffre sur des nombres stockés en texte
Du caractère au chiffre
c - '0' donne la valeur d'un caractère chiffre ('7' - '0' vaut 7). Dans l'autre sens, d + '0' donne le caractère d'un chiffre d entre 0 et 9.
Construire un nombre
Pour transformer « 427 » en nombre, on part de 0 et, pour chaque chiffre de gauche à droite, on fait valeur = valeur * 10 + chiffre : 0 → 4 → 42 → 427.
La même idée fonctionne dans une autre base : en binaire, on multiplie par 2 au lieu de 10.
Les très grands nombres
Un long long s'arrête vers 9 × 10¹⁸. Au-delà, on garde le nombre sous forme de texte et on calcule chiffre par chiffre, en partant de la droite et en gérant la retenue, comme à l'école.
Exemples commentés
1.Lire un nombre à la main
#include <stdio.h>
int main(void) {
char s[20];
scanf("%19s", s);
int valeur = 0;
for (int i = 0; s[i] != '\0'; i++) {
valeur = valeur * 10 + (s[i] - '0'); // on décale et on ajoute
}
printf("%d\n", valeur + 1);
return 0;
}Entrée
0427
Sortie
428
Les zéros de tête ne changent rien : 0 → 0 → 4 → 42 → 427, puis on ajoute 1 pour montrer que c'est bien un nombre.
2.Ajouter 1 à un grand nombre
#include <stdio.h>
#include <string.h>
int main(void) {
char s[102];
scanf("%100s", s);
int n = (int) strlen(s);
int i = n - 1;
while (i >= 0 && s[i] == '9') { // les 9 deviennent des 0
s[i] = '0';
i--;
}
if (i >= 0) {
s[i]++; // '4' devient '5'
printf("%s\n", s);
} else {
printf("1%s\n", s); // 999 + 1 = 1000
}
return 0;
}Entrée
129999999999999999999999
Sortie
130000000000000000000000
On propage la retenue de droite à gauche. Ce nombre est bien trop grand pour un long long.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
Oublier de soustraire '0'
À éviter
somme += s[i];
À préférer
somme += s[i] - '0';
Sans - '0', on additionne les codes ASCII (48 pour '0') au lieu des chiffres.
Lire les chiffres dans le mauvais sens
Pour construire un nombre, on lit les chiffres de gauche à droite. Pour une addition posée, on part de la droite (les unités).
Entraîne-toi
5 questions variées pour fixer la leçon : choix, résultat à prévoir, ligne à compléter, code à remettre dans l'ordre, erreur à trouver.
À toi de jouer !
27 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.