Convertir décimal en n-aire [python]

en premier

・ Parce que les débutants étudient également, j'apprécierais vos conseils. ・ Il y a une explication des nombres n-aires au début, donc ceux qui le connaissent n'ont pas à le lire.

Qu'est-ce qu'un nombre décimal?

Dans notre monde, nous traitons essentiellement des nombres avec le concept de nombres décimaux. Par exemple Le nombre 1234 est ... + 10000 * 0 + 1000 * 1 + 100 * 2 + 10 * 3 + 1 * 4 Cela signifie omettre [1,10,100,1000,10000, ......], qui est un multiplicateur de puissance de 10. (Bien que le 0 de début soit omis)

Si vous écrivez "1234" en "Kanji", cela représente un nombre sans omettre cette abréviation dans le miso

C'est fastidieux d'écrire 1 224, n'est-ce pas? (Je suis fatigué de voir)

Je pense qu'écrire en omettant le multiplicateur de puissance de 10 est l'une des grandes inventions de l'histoire des mathématiques. (L'abréviation d'Einstein est également appelée la meilleure invention laissée par Einstein, et l'abréviation qui est trop pratique est étonnante (petite sensation moyenne))

Qu'est-ce qu'un nombre n-aire?

Mais à mesure que les mathématiques progressaient, les mathématiciens ont commencé à rechercher la romance dans la généralisation (je ne pense pas que la romance le fasse). Vous avez commencé à penser à généraliser cette notation numérique. Alors que faire si nous omettons la puissance de n au lieu de la puissance de 10? C'est le concept des nombres n-aires.

règle n-aire

Tout d'abord, les règles de base sont les mêmes que dans le monde décimal. Cependant, il existe des règles dont vous n'avez peut-être pas connaissance. C'est "La puissance du coefficient n doit être inférieure à n" quelque chose comme. Dans le monde binaire En pensant à un * 4 Si a = 3 (2+1)*4 = 8 + 1 * 4 et 8 apparaît, non? Cela a le sens de porter. Je sais s'il y a un report au milieu du calcul Je n'aime pas le report de la notation numérique. Bien sûr, il peut y avoir une notation qui permet le report, mais si le report est autorisé, la notation numérique n'est pas uniquement déterminée (il y en a deux ou plus).

Par exemple, si le nombre 9 est en notation binaire Puisqu'il est 1 * 8 + 0 * 4 + 0 * 2 + 1 * 1, il peut s'écrire 1001. Cependant, si vous autorisez le transport 08+14+22+11=121 2 s'écrit 10 dans ce monde 121 = 1 (10) 1 et le style d'écriture est différent de 1001 et 9 est exprimé de deux manières. Bien sûr, nous pouvons créer un monde de mathématiques qui admet cela, Utilisons cette condition car elle est uniquement déterminée en définissant simplement "le coefficient est inférieur à n". Parce que c'est plus pratique. (Je n'y ai pas pensé, mais ce serait ennuyeux si je m'impliquais avec bien défini)

Description du programme

Je vais faire un programme pour convertir en un nombre de base de mon choix, mais cette fois je retournerai chaque coefficient sous forme de liste. La raison en est que lorsque vous souhaitez convertir en 100 base, vous pouvez facilement voir le coefficient 87. Expliquer avec des exemples plus concrets "8765" est en notation 100-aire Cela devient (87) (65). ((87) devient un nombre à un chiffre) Cependant, c'est difficile à voir, donc je l'écrirai comme [87,65] dans la liste. La signification est 87 * 100 + 65 * 1.

Flux de programme

Tout d'abord, entrez le nombre que vous souhaitez convertir en décimal et demandez-leur de saisir le nombre que vous souhaitez convertir.

N=int(input())#La valeur décimale que vous souhaitez convertir
K=int(input())#Numéro de base

Oh, je vais en faire une fonction

def change(N,shinsu):

Et nous préparerons la liste de retour. Il est facile de connaître le nombre de chiffres après la conversion, alors trouvez d'abord le nombre de chiffres

    keta=0
    for i in range(10**9):
        if N<shinsu**i:
             keta+=i
             break

Vous connaissez maintenant le nombre de chiffres après la conversion. En d'autres termes, maintenant que nous connaissons la taille de la liste à renvoyer, nous allons préparer la liste.

    ans=[0]*keta

Tout ce que vous avez à faire est de trouver le coefficient K ^ x depuis le début.

    for i in range(1,keta+1):
        j=N//(shinsu**(keta-i))
        ans[check]=j
        check+=1
        N-=(j)*(shinsu**(keta-i))

Si vous le retournez à la fin, vous avez terminé

    return ans

Pour le mettre ensemble

N=int(input())#La valeur décimale que vous souhaitez convertir
K=int(input())#Numéro de base

def change(N,shinsu):
    keta=0
    for i in range(10**9):
        if N<shinsu**i:
             keta+=i
             break
    ans=[0]*keta
    check=0
    for i in range(1,keta+1):
        j=N//(shinsu**(keta-i))
        ans[check]=j
        check+=1
        N-=(j)*(shinsu**(keta-i))
    return ans

print(change(N,K))

C'est tout ce qu'on peut en dire!

J'ai essayé de jouer

1023
2
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
9765624
5
[4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
2853116705
11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

De n-aire à décimal

Inversement, si vous recevez une liste de nombres n-aires, créez une fonction qui la restaure en nombres décimaux.

def henkan(list,shinsu):
    l=len(list)
    ans=0
    for i in range(1,l+1):
        ans+=list[-i]*(shinsu**(i-1))
    return ans

Résumé

J'ai personnellement eu du mal à exprimer des nombres hexadécimaux en utilisant A, B, C, D, E et F, alors je l'ai créé. C'est une fonction que j'ai créée dans la pratique du programme et c'est tout à fait ma fonction préférée. Merci pour vos conseils et encouragements> <

Recommended Posts

Convertir décimal en n-aire [python]
python, php, ruby Comment convertir un décimal en n
[Python] Convertit les nombres décimaux en nombres binaires, octaux et hexadécimaux
[Python] Convertit les nombres naturels en nombres ordinaux
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
[python] Convertir la date en chaîne
Convertir numpy int64 en python int
[Python] Convertir la liste en Pandas [Pandas]
[Python] Convertir Shift_JIS en UTF-8
Convertir l'adresse IP en décimal
Convertir le code python 3.x en python 2.x
Convertir le masque de réseau de notation CIDR en notation décimale à points en Python
Comment convertir des nombres à virgule flottante en nombres binaires en Python
Convertir Markdown en PDF en Python
Convertir la liste en DataFrame avec python
Python> liste> Convertir une double liste en une seule liste
Python> tuple> Convertir un double tuple en un seul tuple
[Python] Changer l'alphabet en nombre
Convertir un mémo à la fois avec Python 2to3
Convertir Python> séquence de deux valeurs en dictionnaire
[Python] Comment afficher des nombres aléatoires (module aléatoire)
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment convertir Python en fichier exe
[Python] Convertit les délimiteurs de fichier csv en délimiteurs de tabulation
Convertir Hiragana en Romaji avec Python (bêta)
Conversion de katakana en voyelle kana [python]
Convertissez des données FX 1 minute en données 5 minutes avec Python
python> Convertir le tuple en liste> aList = list (pi_tuple)
Convertir le type de date Python au format RFC822
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
Convertir des nombres chinois en nombres arabes avec Python
Convertir de Markdown en HTML en Python
Convertir une URL absolue en URL relative en Python
Exemple de conversion en ondelettes d'images en Python
Mis à jour vers Python 2.7.9
Convertir en HSV
"Backport" vers python 2
Convertir le fichier FBX en ASCII <-> BINARY en Python
Convertir un PDF en image (JPEG / PNG) avec Python
Convertir le «nombre» de date Excel en date / heure Python
Convertissez des PDF en images en masse avec Python
Script Python pour convertir la latitude et la longitude en code de maillage
[Python] Conversion de DICOM en PNG ou CSV
Convertir un fichier svg en png / ico avec Python
Convertir les valeurs d'époque Windows à ce jour avec python
Convertir STL en maillage Voxel à l'aide de Python VTK
Convertir un float exponentiel en str en Python
Convertir le code de maillage cubique en WKT en Python
Convertir une chaîne au format de liste caractère par caractère avec python
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Convertir le fichier .ipynb du notebook jupyter en fichier .py exécutable python
Python pratique Convertir le calendrier occidental entré en calendrier japonais
Comment convertir / restaurer une chaîne avec [] en python
Comment convertir le type Python # pour les super débutants de Python: str
Convertir un objet de tranche en liste de numéros d'index
Comment installer Python
[Python] Convertit un conteneur à usage général et une classe entre eux
Convertir 202003 en 2020-03 avec les pandas
Changements de Python 3.0 à Python 3.5