¿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?
Respuesta
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.
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.
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;
}
}
}
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
}
for (size_t i = 0; i < sizeof(num); ++i, num>>1)
{
std::cout << (num&1) << "\n";
}
No especificó base.
Es posible que desee probar el código anterior: veo al menos dos problemas. –
Podría, pero no es así. –
@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
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").
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;
}
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
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
usando un deque podrías empujar hacia delante y tenerlos en el orden correcto – David
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;
}
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;
}
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
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;
}
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;
}
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;
}
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();
}
- 1. ¿Cómo dividir un número en sus dígitos en Scala
- 2. ¿Cómo se divide cada elemento en una lista por un int?
- 3. ¿Cómo se divide un infinito para el bucle (;;) en C?
- 4. Dividir un número entero en sus dígitos separados
- 5. Obtenga la cantidad de dígitos en un int
- 6. dividir el valor int en dígitos separados
- 7. ¿Cómo se divide NSString en componentes?
- 8. ¿Se divide en dos variables?
- 9. cómo ordenar un scala.collection.Map [java.lang.String, Int] por sus valores?
- 10. ¿Cómo extraer dígitos fraccionarios de doble/BigDecimal
- 11. ¿Cómo se divide su proyecto en aplicaciones en Django?
- 12. ¿Cómo formatear unsigned int en un número hexadecimal de 8 dígitos?
- 13. cómo se divide una cadena con una cadena en C#
- 14. ¿Cómo ordenar los dígitos en un número?
- 15. ¿Cómo se divide una solución de Visual Studio?
- 16. Javascript divide
- 17. campo mysql int que crece más de 11 dígitos
- 18. pérdida inesperada de precisión cuando se divide dobles
- 19. Determinando si un número se divide equitativamente por 25, Python
- 20. ¿Cómo se divide el código HTML entre dos líneas?
- 21. En Kotlin ¿Cómo puedo convertir un int? a un Int
- 22. ¿Cómo se divide un archivo csv en fragmentos de tamaño uniforme en Python?
- 23. En Lua, ¿cómo puedo saber si un número se divide de manera uniforme en otro número?
- 24. ¿Por qué la memoria se divide en pila y montón?
- 25. ¿Cómo convierto int? en int
- 26. ¿Cómo se comportaría un "registro volátil int i" en C?
- 27. ¿Cómo divide strtok() la cadena en tokens en C?
- 28. ¿Cómo se divide una línea específica de un archivo requerido en el depurador Perl?
- 29. ¿Cómo se divide el intervalo de tiempo entre los subprocesos en un proceso?
- 30. ¿Cómo se divide un conjunto de rangos superpuestos en rangos no superpuestos?
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. –
posible duplicado de [Dividir un entero en sus dígitos C++] (http://stackoverflow.com/questions/4207696/split-an-integer-into-its-digits-c) –