2016-10-26 3 views
-2

Je rencontre des problèmes de codage.Conversion de tableau en nombre (Mikro) C

Je lis l'entrée série dans mon programme et enregistre les nombres dans un tableau.

Maintenant, je veux convertir ce tableau en un entier pour effectuer des calculs, où l'indice de tableau 0 représente le chiffres, index 1, les dix chiffres, etc.

Array[0] represents 1 digit 
Array[1] represents 10 digit 
Array[2] represents 100 digit 
Array[3] represents 1000 digit 
Array[4] represents 10000 digit 
Array[5] represents 100000 digit 

Le tableau est dynamique, donc pourrait avoir seulement 2 index.

Répondre

-1

Les chiffres représentent la valeur à l'emplacement des dizaines.

Array[0]*1 + Array[1]*10 + Array[2]*100 ... etc. 

Vous pourriez faire une boucle pour le faire.

int value = 0; 
int pow = 1; 
for(int i = 0; i<length; i++){ 

    value += Array[i]*pow; 
    pow *=10; 
} 
+0

pow? N'utilisez jamais cette fonction quand vous voulez un entier, car pow (10,2) peut retourner 99,9999, pas 100. Juste avoir une variable "pow" initialisée à 1, et pow * = 10 dans le for. –

+0

Certes, il va aussi être un type double et pas un 'int'. – matt

0

que si toutes les entrées du tableau sont 0-9, et étant donné qu'ils sont dans un type de données qui peut être converti en int sans un casting, cela pourrait fonctionner pour vous:

#include <stdio.h> 

int main (void) { 

int lenght = 6; 
int Array[lenght]; 
Array[0] = 9; 
Array[1] = 4; 
Array[2] = 5; 
Array[3] = 8; 
Array[4] = 1; 
Array[5] = 0; 
int pow = 1; 
int val = 0; 

for (int i = 0; i < lenght; i++) { 
    val += Array[lenght-i-1] * pow; 
    pow *= 10; 
} 

printf("Val is %d", val); 
return 0; 
} 

Note: Cette est une approche primitive, sans erreur. Cela peut ne pas fonctionner dans tous les cas.

Raison de ne pas utiliser pow:

pow ne retourne pas un entier, conduisant à des erreurs avec entier implicite jette. E.G 100 pourrait être 99,9999 à la place, puis tronqué à 99.

+0

C'est un peu drôle. Peut-être que vous devriez mentionner que vous voulez dire la fonction 'pow' dans' math.h'. En outre, quel type de système a une représentation de nombre à virgule flottante qui ne peut pas représenter exactement 100? Je suppose que c ne le définit pas toujours, il est donc possible que votre précision soit inférieure à 7 bits, mais votre exemple est encore un peu tiré par les cheveux. – matt

+0

@matt La précision du point flottant et ce qu'elle ne peut pas/ne peut pas représenter avec précision n'est pas définie par la norme C. Et les implémentations varient énormément. Il n'est donc absolument pas prudent de supposer qu'ils seront toujours précis. – Magisch

+3

Il est défini dans la norme à virgule flottante qui devrait être utilisée par c. Vous avez la garantie que les entiers d'un point donné sont toujours totalement précis. –

1

Utilisez une boucle. Vous devez connaître la longueur du nombre ou la longueur du tableau. Les positions inutilisées dans le tableau doivent être 0.

int i; 
long result = 0; // Choose a suitable integer type. 
for (i = length; i <= 0; --i) { 
    result = result * 10 + Array[i]; 
} 
+0

C'est en fait une solution assez élégante par rapport à celle que j'ai trouvée ci-dessous. +1 pour ça :) – Magisch

0

Je ne suis pas 100% sûr de ce que vous essayez de faire, mais est-ce que vous voulez faire:

#include <stdio.h> 

int main (void) 
{ 

    int numbers[] = { 1, 2, 3, 4, 5, 6 }; 
    int multiplier = 1; 

    printf ("First printout\n"); 
    for (int i = 0; i < 5; ++i) 
     printf ("Numbers[%i] = %i\n", i, numbers[i]); 

    //this is where the numbers in the array are made into the 1, 10s, 100s etc 
    for (int i = 0; i < 5; ++i) 
    { 
     numbers[i] *= multiplier; 
     multiplier *= 10; 
    } 

    printf ("Second printout\n"); 
    for (int i = 0; i < 5; ++i) 
     printf ("Numbers[%i] = %i\n", i, numbers[i]); 

    return 0; 

} 

Je viens de commencer à apprendre C il y a deux ou trois mois. Je suis sûr qu'il existe de meilleures façons de le faire, mais c'est une solution qui semble résoudre votre problème. J'espère que ça aide!