2015-07-24 2 views
-2

Je souhaite obtenir le nombre présent au chiffre spécifié dans un nombre. Supposons que le numéro soit "123456789" et que je doive retourner le numéro à la position 3 à partir de la gauche. Quelqu'un peut-il m'aider à le faire en C++.Recherche d'un nombre à un chiffre particulier dans un nombre

+3

est le nombre entier numéro ou une chaîne? La question est vague. –

+0

integer @VioletGiraffe –

+1

Je vote pour clore cette question hors-sujet parce que l'étudiant n'a montré aucun effort pour résoudre ses devoirs. – Slava

Répondre

0

Cela devrait retourner le troisième chiffre d'un nombre!

cout << "Enter an integer"; 
int number; 
cin >> number; 
int n = number/100 % 10 

Ou (pour tous les chiffres):

int number = 12345; 
int numSize = 5; 
for (int i=numSize-1; i>=0; i--) { 
    int y = pow(10, i); 
    int z = number/y; 
    int x2 = number/(y * 10); 
    printf("%d-",z - x2*10); 
} 
+1

Y at-il un moyen d'ajouter tous les chiffres d'un numéro de manière simple? –

+0

J'espère que mes modifications utiles :) – Kurt

+2

Mais l'OP a spécifié qu'il voulait le troisième chiffre de la * gauche *, pas de la * droite *. – FredK

2

Pour obtenir le chiffre à tout endroit du nombre que vous pouvez utiliser une simple conversion de chaîne:

int foo = 123456789; 
int pos = 3; 
// convert to string and use the [] operator 
std::cout << std::to_string(foo)[pos - 1];//need to subtract 1 as C++ is 0 index based 
+0

Lorsque vous donnez un code complet pour un devoir d'étudiant, vous ne l'aidez pas vraiment, ni ce site. Surtout quand cet étudiant n'a montré aucun effort pour faire ses devoirs tout seul. – Slava

+0

@Slava Plus que probablement, ils ne seront pas en mesure de l'utiliser de toute façon, si ce sont les devoirs comme l'exemple de travail à domicile que j'ai vu de ce type de question doit utiliser la division et modulo. – NathanOliver

+0

@Slava Ce n'est pas mon devoir. Je suis un débutant à programmer et à essayer de résoudre les défis de base dans hackerrank. Je sais qu'il existe un moyen de résoudre cela en utilisant la division et modulo. Je cherchais juste un moyen efficace .. Merci pour votre soutien. –

0

L'utilisation de std :: stringstream

std::string showMSD3(int foo) 
{ 
    std::stringstream ssOut; 

    std::string sign; 
    std::stringstream ss1; 
    if(foo < 0) { 
     ss1 << (-1 * foo); 
     sign = '-'; 
    } 
    else 
     ss1 << foo; 

    std::string s = ss1.str(); 

    ssOut << "    foo string: '" 
     << sign << s << "'" << std::endl; 

    if(s.size() > 2) 
    { 
     ssOut << " Most Significant Digit 3: " 
      << s[2] // 1st digit at offsset 0 
      << "\n   has hex value: 0x" 
      << std::setw(2) << std::setfill('0') << std::hex 
      << (s[2] - '0') 
      << std::endl; 
    } 
    else 
     ssOut << "      Err: foo has only " 
      << s.size() << " digits" << std::endl; 

    return (ssOut.str()); 
} 

et s omewhere plus proche principale (peut-être en principal):

// test 1 
    { 
     std::cout << showMSD3(123456789) << std::endl; 
    } 

    // test 2 
    { 
     std::cout << showMSD3(12) << std::endl; 
    } 

    // test 3 - handle negative integer 
    { 
     std::cout << showMSD3(-123) << std::endl; 
    } 

avec sortie

   foo string: '123456789' 
Most Significant Digit 3: 3 
      has hex value: 0x03 

       foo string: '12' 
         Err: foo has only 2 digits 

       foo string: '-123' 
Most Significant Digit 3: 3 
      has hex value: 0x03