Tengo un número de 100 dígitos y estoy tratando de poner todos los dígitos del número en una lista, de modo que pueda realizar operaciones en ellos. Para hacer esto, estoy usando el siguiente código:
for x in range (0, 1000): list[x] = number % 10 number = number / 10
Pero el problema al que me estoy enfrentando es que recibo un error de desbordamiento, algo así como un número demasiado grande de coma flotante / entero. Incluso traté de usar la siguiente alternativa
number = int (number / 10)
¿Cómo puedo dividir este gran número con el resultado de nuevo en tipo entero, es decir, sin flotadores?
En Python 3, el number / 10
intentará devolver un float
. Sin embargo, los valores de punto flotante no pueden tener un tamaño arbitrariamente grande en Python y, si el number
es grande, se generará un OverflowError
.
Puede encontrar el máximo que los valores de punto flotante de Python pueden tomar en su sistema utilizando el módulo sys
:
>>> import sys >>> sys.float_info.max 1.7976931348623157e+308
Para evitar esta limitación, utilice //
para obtener un número entero de la división de los dos números enteros:
number // 10
Esto devolverá el valor de piso int
del number / 10
(no produce un flotador). A diferencia de los flotadores, los valores int
pueden ser tan grandes como los necesite en Python 3 (dentro de los límites de memoria).
Ahora puedes dividir los números grandes. Por ejemplo, en Python 3:
>>> 2**3000 / 10 OverflowError: integer division result too large for a float >>> 2**3000 // 10 123023192216111717693155881327...
Si tiene un número entero y quiere cada dígito en una lista, puede usar:
>>> map(int,list(str(number))) [1, 5, 0, 3, 0, 0, 7, 6, 4, 2, 2, 6, 8, 3, 9, 7, 5, 0, 3, 6, 6, 4, 0, 5, 1, 2, 4, 3, 7, 8, 2, 5, 2, 4, 4, 5, 4, 8, 4, 0, 6, 6, 4, 5, 0, 9, 2, 4, 8, 9, 2, 9, 7, 8, 7, 3, 9, 9, 9, 7, 0, 1, 7, 4, 8, 2, 4, 4, 2, 9, 6, 9, 5, 1, 7, 1, 3, 4, 8, 5, 1, 3, 3, 1, 7, 9, 0, 1, 0, 1, 9, 3, 8, 4, 2, 0, 1, 9, 2, 9]
transforma el int en una cadena, luego la list
tomará cada carácter de la cadena y lo pondrá en una lista. Finalmente, el map
convertirá cada elemento de la lista de nuevo en un int.
Python manejará automáticamente grandes int
s de longitud arbitraria. Lo que no hará es manejar float
de una longitud arbitraria, por lo que debe asegurarse de que no esté obteniendo flotadores en el camino.
Intente int(number) % 10
. Solo se pueden modificar enteros.