2010-05-14 4 views
1

Quelqu'un pourrait-il me dire comment vérifier le numéro que j'ai obtenu d'un * b? Ce qui est je voudrais savoir chaque partie de ce nombre ainsi par exemple si le résultat de cette expression serait 25 Je voudrais savoir que le premier chiffre est deux et le deuxième chiffre est cinq.Comment vérifier le numéro?

+0

Qu'est-ce qu'un "* b"? –

+2

si (résultat == 25) –

+0

@drelihan et si le résultat est égal à 26? –

Répondre

5

peut-être un peu exagéré ... mais fonctionne même avec des doubles

#include <sstream> 
#include <iostream> 

int main() 
{ 
    double a = 5.2; 
    double b = 7; 
    double z = a*b; 

    std::stringstream s; 
    s << z; 

    for (int i = 0; i < s.str().length(); i++) 
     std::cout << i << ": " << s.str()[i] << std::endl; 

    return 0; 
} 
+0

simple mais efficace :) – UncleZeiv

+0

Il va y avoir un '. 'Quelque part :) –

2

Vous devez obtenir le résultat de la division entière par la puissance appropriée de dix.

int exp = std::floor(std::log10(num)); 
int first_digit = num/int(std::pow(10.0, exp)); 

Ceci est un moyen (inefficace) d'obtenir le premier chiffre directement. Il vaudrait mieux recommencer depuis le dernier.

+0

oui cela résoudrait le problème avec la partie unité mais comment obtenir des dizaines et des centaines et ainsi de suite? Je pensais que peut-être un peu de décalage serait utile. –

2
int val = res; 

while(val > 0) 
{ 
    std::cout << val % 10 << endl; 
    val /= 10; 
} 
3
a mod 10 == last digit of a 
a/10 == a without its last digit 

Ainsi, 25:

25 % 10 == 5 => 5 is the last digit of 25 
25/10 == 2 
2 % 10 == 2 => 2 is the first digit of 25 

Vous pouvez les utiliser dans une boucle while pour obtenir chaque chiffre.

while (num > 0) 
{ 
    digit = num % 10; 
    // digit is now the current digit, counting from the right towards the left. 
    num /= 10; 
} 
1
char str[30]; 
sprintf(str,"%d",a*b); 
int ndigits = strlen(str); 

Il vous avez tous les chiffres de votre valeur dans la chaîne, et le nombre de chiffres dans ndigits.

par exemple. si a * b = 25 vous obtenez

ndigits==2 
str[ndigits-1]=='5' 
str[ndigits-2]=='2' 

À quoi cela correspond-il?

0

Rappelez-vous simplement que par ex. 2101 est fondamentalement juste 2 * 10^3 + 1 * 10^2 + 0 * 10^1 + 1 * 10^0.

+0

Mauvais.'1234/10^2' vous donnera' 12', pas le chiffre à la deuxième position – IVlad

+0

Oui, j'ai vu ça et j'essaie de le réparer maintenant. – InsertNickHere

+0

Vous étiez très proche au départ :). Vous pouvez utiliser '(num/10^k)% 10' pour obtenir le chiffre' k' th. – IVlad

1

Il y a probablement un malentendu sous-jacent ici. Le résultat de la multiplication sera probablement 0x00000019. (Le nombre de zéros principaux sera différent). La deuxième étape, la convertir en décimal canonique donnera "25".

Il est important de réaliser que les ordinateurs, contrairement aux humains normaux, ne font pas leurs calculs en décimal mais en binaire. Par conséquent, si vous voulez vérifier une propriété comme "dernier décimal chiffre d'un nombre", il n'est pas directement disponible pour eux.

Questions connexes