2010-09-27 14 views
1

Je dois produire un grand nombre, un nombre double précision en utilisant le code suivant:Mise en forme de très grands nombres en C

fprintf(outFile,"   %11.0f %d O(g(n))",factorialNotRecursive(index,factCount),factValue); 

maintenant le nombre est si grand qu'il saute hors de l'alignement plus loin sur la liste de sortie. Une fois qu'il dépasse 11 chiffres, le maximum spécifié continue pour agrandir. Y a-t-il un moyen de faire face à cela? Je ne suis pas sûr de la taille des entrées qui seront exécutées sur ce programme.

+3

Um, change '% 11.0f' pour quelque chose de plus grand, comme'% 20.0f'? –

+1

Oui, sachant les limites d'entrée aiderait à répondre à cette question ... ;-) – pascal

+0

Merci pour les conseils, je fais une affectation pour la classe, et notre professeur nous transition vers c de C++ que nous avons appris dans les cours d'introduction. Merci encore! –

Répondre

1

Je pense que vous ne pouvez pas le faire directement. Vous devez imprimer sur une chaîne, puis changer la chaîne.

/* pseudo (untested) code */ 

value = factorialNotRecursive(index, factCount); 
/* make sure buff is large enough (or use snprintf if available) */ 
n = sprintf(buff, "%11.0f", value); 
if (n > 11) { 
    buff[10] = '+'; 
    buff[11] = 0; 
} 
fprintf(outFile,"   %s %d O(g(n))", buff, factValue); 
+0

wow, bon à savoir, merci! –