・ 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.
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))
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.
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)
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.
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!
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]
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
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