2010-11-23 21 views
19

¿Cómo puedo dividir un int en C++ con sus números únicos? Por ejemplo, me gustaría dividir 23 de a 2 y 3.¿Cómo se divide un int en sus dígitos?

+7

pensar en él como un rompecabezas. Si todavía no puede encontrar la manera de hacerlo, publique lo que intentó y la gente puede comentar. –

+2

posible duplicado de [Dividir un entero en sus dígitos C++] (http://stackoverflow.com/questions/4207696/split-an-integer-into-its-digits-c) –

Respuesta

52

Dado el número 12345:

5 es 12345 % 10
4 es 12345/10 % 10
3 es 12345/100 % 10
2 es 12345/1000 % 10
1 es 12345/10000 % 10

no proporcionará un código completo ya que esto seguramente se parece a la tarea , pero estoy seguro de que obtienes el patrón.

2

fundido en una cadena o char [] y el bucle en él

+2

Ugh. Esto no puede ser preferible a mod. – jball

+4

Elaborado. No es significativo lanzar (C type cast) y 'int' directamente a 'char []' en esta situación. – Akusete

+2

+1 - funciona, no creo que se merecía el voto a favor –

0

de inicio con la mayor potencia de diez que encaja en una int en su plataforma (para 32 bit int: 1.000.000.000) y realizar una división entera por ella. El resultado es el dígito más a la izquierda. Reste este resultado multiplicada con el divisor de la serie original, y luego continuar con el mismo juego con la siguiente potencia menor de diez y iterar hasta llegar a 1.

2

A continuación se hará el truco

void splitNumber(std::list<int>& digits, int number) { 
    if (0 == number) { 
    digits.push_back(0); 
    } else { 
    while (number != 0) { 
     int last = number % 10; 
     digits.push_front(last); 
     number = (number - last)/10; 
    } 
    } 
} 
4

orden inverso extractor dígitos (. por ejemplo, para 23 será de 3 y 2):

while (number > 0) 
{ 
    int digit = number%10; 
    number /= 10; 
    //print digit 
} 

orden normal extractor dígitos (. por ejemplo, para 23 habrá 2 y 3):

std::stack<int> sd; 

while (number > 0) 
{ 
    int digit = number%10; 
    number /= 10; 
    sd.push(digit); 
} 

while (!sd.empty()) 
{ 
    int digit = sd.front(); 
    sd.pop(); 
    //print digit 
} 
-3
for (size_t i = 0; i < sizeof(num); ++i, num>>1) 
{ 
    std::cout << (num&1) << "\n"; 
} 

No especificó base.

+1

Es posible que desee probar el código anterior: veo al menos dos problemas. –

+0

Podría, pero no es así. –

+0

@Noah Roberts, es posible que no se haya especificado una base, pero esto no divide '23' en' 2' y '3' según el ejemplo dado. – jball

0

Puede usar una secuencia de operaciones x/10.0f y std :: floor para tener un "enfoque matemático". O también puede usar boost :: lexical_cast (the_number) para obtener una cadena y luego simplemente puede hacer the_string.c_str() [i] para acceder a los caracteres individuales (el "enfoque de cadena").

1

el truco clásico es usar el módulo 10: x% 10 le da el primer dígito (es decir, el dígito de las unidades). Para otros, tendrá que dividir primero (como se muestra por ya muchos otros mensajes)

He aquí una pequeña función para obtener todos los dígitos en un vector (que es lo que parece querer hacer):

using namespace std; 
vector<int> digits(int x){ 
    vector<int> returnValue; 
    while(x>=10){ 
     returnValue.push_back(x%10);//take digit 
     x=x/10; //or x/=10 if you like brevity 
    } 
    //don't forget the last digit! 
    returnValue.push_back(x); 
    return returnValue; 
} 
+0

x% 10 le da el último dígito no primero, y su código devolverá los números en el vector, pero en orden inverso. – Svisstack

+0

Siempre vi las unidades como el primer dígito. Por supuesto, mi código envía los dígitos en orden inverso, pero evita tener que conocer la "longitud" de la función media x. – rtpg

+0

usando un deque podrías empujar hacia delante y tenerlos en el orden correcto – David

0

no necesariamente recomiendo este (que es más eficiente para trabajar con el número en lugar de convertirlo en una cadena), pero es fácil y funciona :)

#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <string> 

#include <boost/lexical_cast.hpp> 

int main() 
{ 
    int n = 23984; 
    std::string s = boost::lexical_cast<std::string>(n); 
    std::copy(s.begin(), s.end(), std::ostream_iterator<char>(std::cout, "\n")); 
    return 0; 
} 
0

una respuesta simple a esta pregunta puede ser: 1) Leer el número "n" del usuario .... 2) Usando While Loop Asegúrate de que no sea cero ... 3) Toma el módulo 10 del número "n" ... Esto te dará su último dígito ... 4) Luego divide el número "n" por 10 ... Esto elimina el último dígito del número "n" ya que en la parte decimal se omite ... 5) Visualizar el número ........

creo que va a ayudar .... Yo solía simple código tiene gusto:

#include <iostream> 
using namespace std; 
int main() 
{int n,r; 

    cout<<"Enter Your Number:"; 
    cin>>n; 


    while(n!=0) 
    { 
       r=n%10; 
       n=n/10; 

       cout<<r; 
    } 
    cout<<endl; 

    system("PAUSE"); 
    return 0; 
} 
0
int n;//say 12345 
string s; 
scanf("%d",&n); 
sprintf(s,"%5d",n); 

Ahora puede acceder a cada dígito a través de s[0], s[1], etc

0

puede contar el número de dígitos que desea imprimir primero

#include <iostream> 
#include <cmath> 
using namespace std; 

int main(){ 
int number, result, counter=0, zeros; 

do{ 
    cout << "Introduce un numero entero: "; 
    cin >> number; 

    }while (number < 0); 

    // We count how many digits we are going print 
    for(int i = number; i > 0; i = i/10) 
     counter++; 

    while(number > 0){ 

     zeros = pow(10, counter - 1); 

     result = number/zeros; 
     number = number % zeros; 
     counter--; 

     //Muestra resultados 
     cout << " " << result; 
    } 
    cout<<endl; 

}

1

declarar una matriz y almacenar dígitos individuales de la matriz como ésta

int num, temp, digits = 0, s, td=1; 
int d[10]; 
cout << "Enter the Number: "; 
cin >> num; 
temp = num; 
do{ 
    ++digits; 
    temp /= 10; 
} while (temp); 

for (int i = 0; i < digits-1; i++) 
{ 
    td *= 10; 
} 

s = num; 
for (int i = 0; i < digits; i++) 
{ 
    d[i] = s/td %10; 
    td /= 10; 

} 
0

Sobre la base de la respuesta de icecrime escribí esta función

std::vector<int> intToDigits(int num_) 
{ 
    std::vector<int> ret; 
    string iStr = to_string(num_); 

    for (int i = iStr.size() - 1; i >= 0; --i) 
    { 
     int units = pow(10, i); 
     int digit = num_/units % 10; 
     ret.push_back(digit); 
    } 

    return ret; 
} 
0
int power(int n, int b) { 
    int number; 
    number = pow(n, b); 
    return number; 
} 


void NumberOfDigits() { 
    int n, a; 
    printf("Eneter number \n"); 
    scanf_s("%d", &n); 
    int i = 0; 
    do{ 
     i++; 
    } while (n/pow(10, i) > 1); 
    printf("Number of digits is: \t %d \n", i); 

    for (int j = i-1; j >= 0; j--) { 
     a = n/power(10, j) % 10; 
     printf("%d \n", a); 
    } 
} 

int main(void) { 
    NumberOfDigits(); 
} 
Cuestiones relacionadas