Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 25-07-2010 11:04:41

Golgup
Membre actif
Inscription : 09-07-2008
Messages : 574

[Python] Conversion de base X vers base Y

Hi!

Vous êtes illimité au niveau de la taille du nombre à convertir (Clef publique du site de la CIA en base 16):

 30 81 89 02 81 81 00 e0 3e 44 70 12 a5 46 0e 3b 23 16 ac 05 22 bd 68 81 d4 9a 31 6a 86 21 ff df 15 44 42 be 6f 82 0e 87 97 51 dd 00 9e 3c 9f 3d 0a a2 56 24 e9 71 33 c8 18 74 72 13 3e 8f 3e f5 a6 9c b1 d7 93 e4 8f 70 54 d6 cc ce 69 66 db d2 11 c3 19 33 9c 39 70 18 e8 50 12 68 5c 37 8a db 3f 75 f9 3d 92 fe b9 72 6f 80 66 51 a2 d8 46 f9 5b 18 7f 5d 2f f7 05 4c 11 ea 46 76 51 cc 71 ea 17 99 17 91 84 a0 21 02 03 01 00 01

en base 10 est

2698675166254423393626859824845656636595441726092504301593738338169420225643053850296527607437539613821699019572319248569102881828849284697349021400396717367584961449337778183410907138106563063653178050567982414209438314276023422855945411162942195173706901552237631562998682895280722616796293208525463833309001395404181948055119777038337

Le nombre est à rentrer brut.

ENJOY!

from math import log

print""
print""
print"                                                     ****************************************************"
print"                                                               CONVERSION DE NOMBRE EN BASE X"
print"                                                     ****************************************************"
print""
print"                                            ! Les conversions en bases supérieures à 16 ne sont pas prises en charge !"
print""
print""


n=raw_input('Nombre à convertir:')
a1=input("Base d'écriture:")
a2=input('Base de conversion:')

tz=['a','b','c','d','e','f']
ty=[]
tv=[]

def convert(n):
    L=int(log(n)/log(a2))
    s=int(n/(a2**L))
    N=n
    t3=[str(s)]
    while L>0:
        N-=(a2**L)*s
        L-=1
        s=int(N/(a2**L))
        t3.append(str(s))
    for u in range(0,len(t3)):
        if int(t3[u])>=10:
            t3[u]=chr(int(t3[u])+87)
    return t3

if a1<11:
    X=str(n)
    t=[]
    l=len(X)
    a=-1
    t1=[]

    while l>0:
        a+=1
        l-=1
        t1.append(int(X[a])*(a1**l))

    for i in range(0,len(X)):
        t.append(int(X[i]))
    if max(t)>=a1:
        print "                                                     VOTRE NOMBRE N'EST PAS ECRIT EN BASE",a1,'!'
    else:
        print "                                                     Votre nombre en base",a2,":", "".join(convert(sum(t1)))

else:
    if " " in n:
        n=n.replace(" ","")
    for i in range(0,len(n)):
        ty.append(n[i])
    for i in range(0,len(ty)):
        if ty[i] in tz :
            ty[i]=str(ord(ty[i])-87)
    l=len(ty)-1
    a=0
    while l>-1:
        tv.append(int(ty[a])*(a1**l))
        l-=1
        a+=1

    print "                                                         Votre nombre en base",a2,":", "".join(convert(sum(tv)))

+

Dernière modification par Golgup (26-07-2010 13:35:30)


« c’est cette infinité, insondable et obscure, cause des plus vils combats ! … »

Hors ligne

#2 05-08-2010 14:02:30

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 991

Re : [Python] Conversion de base X vers base Y

Re,

Ah, souvenirs, souvenirs...
Ce fut mon premier travail de programmation, programmé avec le langage de ma Texas TI66 lors du plan "Informatique pour tous", pendant que mes "petits camarades",utilisaient le langage LOGO, à ouvrir ou fermer des écluses, sur des MO5 ou TO7 de chez Thomson...
Ce qui m'avait incité à acheter un Amstrad CPC 6128 à 2 banques de 64... ko de RAM !
Puis, il avait fini par "défuncter" de son point faible : le lecteur de dq !!!
Je l'ai racheté depuis...

Bon, j'ai repris depuis avec Python, différents programmes antérieurs.
Golgup nous ayant offert ce convertisseur de base X en base Y, je vous offre à mon tour ma version (sans limite non plus... autre que la quantité de RAM), valable entre base 2 et base 36, pour peu qu'on utilise les lettres de A à Z.

# usr/bin/env python
# -*- coding: cp1252 -*-

from __future__ import division
from math import log

def choixbase(es,b1):
    ok,supp=0,"de départd'arrivée"
    while not ok:
        bs=raw_input("Entrer la base "+supp[es:es+9]+" (entre 2 et 36) : ")
        try:
            bsn=int(bs)
            if bsn<2 or bsn>36:
                print "Désolé, valeur hors limite. Veuillez recommencer S.V.P.\n"
            else:
                if es==9 and bsn==b1:
                   print "Désolé, Les bases sont les mêmes. Veuillez recommencer S.V.P.\n"
                else:
                    ok=1          
        except ValueError:
            print "Désolé, ceci n'est pas un nombre. Veuillez recommencer S.V.P.\n"
    return bsn
                     
def choixdunombre(b):
    ok=0
    while not ok:
        nb=raw_input("Entrer le nombre à convertir : ").upper()
        chfr='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'[:b]
        for car in nb:
            if car not in chfr:
                print 'Désolé, '+car+' n\'existe pas en base '+str(b)+'. Veuillez recommencer, S.V.P\n'
                break
            else:
                ok=1
    return nb

def versdix(s,b):
    l,nb,s=len(s),0,s[::-1]
    for i in xrange(l):
        cor=48+7*(s[i]in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')          
        nb+=(ord(s[i])-cor)*b**i
    return nb

def versbase(nbcr,b):
    nb,nbdiv='',int(log(nbcr)//log(b))+1
    for i in xrange(nbdiv):
        nbcr,r=nbcr//b,nbcr%b
        nb=chr(48+r+7*(r>9))+nb
    return nb                    

print "         ******************************************"
print "         *         Conversion d'un nombre         *"
print "         *      d'une base X vers une base Y      *"
print "         ******************************************\n\n"

bd=choixbase(0,0)
nb=choixdunombre(bd)
ba=choixbase(9,bd)

# Affichage des données entrées
print'\n Le nombre'
print '    '+nb
print ' écrit en base',bd

# Calculs
if bd!=10:
    nbcr=versdix(nb,bd)
else:
    nbcr=int(nb)
if ba !=10:
    rep=versbase(nbcr,ba)
else:
    rep=str(nbcr)  

#Affichage de la réponse
print '\n s\'écrit'
print '    '+rep
print ' en base '+str(ba)

Quelques explications.
1. J'ai implémenté des contrôles des entrées :
    * Vérification de la validité de la base entrée : limites, entrée numérique
    * Vérification de la validité du nombre entré avec la base de départ
    * La même fonction traite l'entrée de la base d'arrivée (ba) et la base de départ.
      Un petit artifice, la chaîne supp, permet d'adapter la question avec ses 9 premiers ou derniers caractères

2. Je convertis d'abord le nombre de la base bd (sauf si bd = 10), puis le résultat vers la base ba (sauf si ba =10).
    J'ai trouvé sur le net une conversion directe de base x vers y (si x et y <10) : elle buggue.

3. Conversion en  base 10.
   * Je "retourne" le nombre avant : c'est le rôle de s[::-1]
   * J'extrais chaque caractère de la chaîne : soit c'est un chiffre de 0 9, soit une lettre de A à Z..
      - Les chiffres de 0 à 9 ont pour code ASCII (obtenu par ord(s[i]) de 48 à 87, lettres A...Z de 65 à 90,
      - Si le caractère est un chiffre j'enlève 48 au Code ASCII pour avoir sa valeur : 48-48=0, 49-48=1...
      - Si le caractère est une lettre, j'enlève 55 : A ,B, C  --> code-55 : 65-55=10, 66-55 = 11, 67 - 55 = 12,
      - J'enlève donc cor = 48, plus 7 si le caractère est une lettre (la parenthèse que multiple 7 vaut 1 ou 0)
   * Sans surprise, je multiplie le nombre obtenu par bd^i (--> bd**i), avant de l'ajouter au résultat existant

4. Conversion en base autre que 10.
    * Comme à la main, il y a calculs par divisions successives
    * Je cherche donc le nombre de divisions nécessaires + 1 qui permet d'obtenir un reste de plus..
       J'évite ainsi une ligne supplémentaire pour concaténer le dernier quotient...  (Y a pas de petits profits !)
    * J'utilise la même astuce que précédemment, mais à l'envers, en partant de 48 (ou 48 + 7) plus le reste.
       On obtient ainsi le code ASCII du caractère alphanumérique, et le caractère lui-même à concaténer via chr().

Golgup, il va falloir que je me penche sérieusement sur ton code, parce que comme ça, même à la relecture, je ne comprends pas très bien (tes noms de listes et/où de variables ne sont pas très explicites) ce que tu fais...
A moins que tu n'aies la gentillesse d'épargner mes veilles neurones, en documentant ton procédé ?

Commentaires ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 05-08-2010 16:58:20

Golgup
Membre actif
Inscription : 09-07-2008
Messages : 574

Re : [Python] Conversion de base X vers base Y

yo

C'est vrai que dans mes programmes c'est en général toujours le bordL, mais 'qu'importe le flacon pourvu qu'on ait l'ivresse'?!.

Non, plus sérieusement, dans les grandes lignes, mon prog se divise en 2 parties (introduites par if et else) opérant chacune dans le cas ou la base d'écriture est < ou > à 10 afin d'éviter les problèmes liés au lettres. De plus, dans ce prog je ramène toujours le nombre à convertir à la base 10 pour le mettre ensuite à la base de conversion. (cette derniere action est le rôle de la fonction "convert" qui converti de la base 10 à la base a2). Ce programme est perfectible et peut se raccourcir au niveau des calculs, je dirais même qu'il prend le chemin des écoliers, mais c'est comme ça, si j'aperçois un des chemins qui mène à la résolution d'un problème quelconque, je l'emprunte, quelle que soit sa longueur. (peut être par fainéantise).

PS: j'ai testé ta version, elle est bien plus rapide!

Dernière modification par Golgup (05-08-2010 19:27:03)


« c’est cette infinité, insondable et obscure, cause des plus vils combats ! … »

Hors ligne

#4 05-08-2010 18:50:15

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 991

Re : [Python] Conversion de base X vers base Y

Ave,

Merci, jeune-homme !
Bin, tu vois, j'ai d'abord écrit une première version, sans les entrées, qui marchait impec, puis j'ai greffé les Entrées avec contrôles dessus, puis je l'ai pressurée, traquant les lignes "inutiles et surtout les if else, qui ralentissent l'exécution.
Exemple. A la place de
if a==2 :
    b=3
else:
    b=4
On peut aussi bien faire :
b=3+(a!=2)
La parenthèse vaut soit True, soit False, mais dans les calculs True vaut 1 et False 0...

D'autre part, tu commences les calculs et là seulement tu testes la cohérence du nombre par rapport à la base de départ : ce n'est pas logique, tu devrais tester ça dès que tu rentres la base, en disant que cette base n'est pas compatible avec le nombre précédent (c'est pourquoi, j'entre la base d'abord et le nombre après)
Bon, j'aurais pu travailler avec un dictionnaire, mais c'est plus long à écrire (t'es pas le seul à avoir des accès de flemme, tu vois...), donc j'utilise la chaîne "0123456789ABCDEFGHIJKLMNOPRSTUVWXYZ" de 36 caractères alphanumériques...
Or en base b, il y a b "chiffres" à utiliser...
Donc en base 16, les 16 premiers : chfr="0123456789ABCDEFGHIJKLMNOPRSTUVWXYZ"[:16] --> chfr="0123456789ABCDEF".
En base 12 les 12 premiers : chfr="0123456789ABCDEFGHIJKLMNOPRSTUVWXYZ"[:16] --> chfr="0123456789AB".
Nanti de cela, je n'ai plus qu'à tester si les caractères utilisés pour taper le nombre figurent bien dans la chaîne chfr...
Les codes ASCII des caractères de cette chaîne valent dans l'ordre :
48 49 50 51 52 53 5a 55 56 57 65 66 67 68 69 70...
Donc si je veux calculer de n'importe quelle base (inférieure ou supérieure à 10, peu importe !), lorsque j'extrais l'un des caractères suivants (pour 16 par ex) :
carac     "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "A"  "B"  "C"  "D"  "E"  "F"
Valeur     0    1     2     3    4     5    6     7   8     9   10    11   12   13    14  15
ASCII    48   49   50   51   52  53   54   55  56   57  65    66   67   68    69  70

Je vois qu'il faut retirer 48 au code ASCII pour 0 - 9 et 55 pour A - B.
J'avais d'abord réglé ça avec if ... else ..., puis j'ai pensé que le nombre ayant passé les contrôles, si une lettre était présente, c'était "légal" !
Alors j'ai pris une variable cor (pour correction) et je lui ai donné la valeur :
cor = 48 + 7*(s[i]in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), c'est à dire que cor prend la valeur 48 ou 55...
Donc, selon selon le cas, j'enlève ainsi automatiquement 48 ou 55 au code ASCII et je tombe sur les nombres de la ligne Valeur, ce sans if ... else ... ni bidouillages de chaînes (ou liste dans ton cas)...
D'autre part, pourquoi est-ce que je retourne le nombre par s[::-1] ?
Ainsi de G à D j'aurais unités, dizaines, centaines, milliers... donc la base aux puissances 0, 1, 2, 3 : j'ai pensé que ce serait plus rapide que de faire une boucle qui extrait les caractères depuis la fin :
for i in xrange(l):
    cor=48+7*(s[i]in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')         
        nb+=(ord(s[l-i-1])-cor)*b**i
qui entraîne deux soustractions supplémentaires à chaque tour...

Dans l'autre sens avec les divisions successives, en base b, les restes peuvent prendre toutes les valeurs entre 0 et b-1, il suffit donc de rajouter 48 à la valeur du reste ou 55 s'il est supérieur à 9 pour obtenir le code ASCII du caractère à écrire avec chr(48+rst+7*(rst > 9))

J'ai longuement hésité pour l'extraction des chiffres : il est plus rapide de travailler sur des nombres que sur des chaînes...
Mais il aurait fallu que je teste la présente de lettres ou pas...
D'autre part, rien que pour le nombre a=789456, si je veux extraire 6, 5, 4, 9, 8, 7 je suis obligé de faire
789456 % 10 --> 6
(789456 // 10**1) % 10 --> 5
(789456 // 10**2) % 10 --> 4
(789456 // 10**3) % 10 --> 9
................
Soit

>>> L=[((a//10**i)%10) for i in range(6)]
>>> print L
[6, 5, 4, 9, 8, 7]

Avec un nombre de 10 chiffres :
* 10 calculs de puissances
* 10 divisions
* 10 opérations modulo.

Je suis persuadé qu'entre ce code

>>> a=8123056749
>>> L=[int((a//10**i)%10) for i in range(10)]
>>> L
[9, 4, 7, 6, 5, 0, 3, 2, 1, 8]

et celui-ci :

>>> a='8123056749'
>>> a=a[::-1]
>>> L=[int(x) for x in a]
>>> L
[9, 4, 7, 6, 5, 0, 3, 2, 1, 8]

Y a pas photo pour la vitesse, en plus dans le 1er cas, il ne faut pas de lettres, alors que dans le second on peut se permettre de l'ignorer...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 09-08-2010 11:00:04

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 991

Re : [Python] Conversion de base X vers base Y

Salut,

Une version un poil plus rapide :

# usr/bin/env python
# -*- coding: cp1252 -*-

from __future__ import division
from math import log

def choixbase(es,b1):
    ok,supp=0,"de départd'arrivée"
    while not ok:
        bs=raw_input("Entrer la base "+supp[es:es+9]+" (entre 2 et 36) : ")
        try:
            bsn=int(bs)
            if bsn<2 or bsn>36:
                print "Désolé, valeur hors limite. Veuillez recommencer S.V.P.\n"
            else:
                if es==9 and bsn==b1:
                   print "Désolé, Les bases sont les mêmes. Veuillez recommencer S.V.P.\n"
                else:
                    ok=1          
        except ValueError:
            print "Désolé, ceci n'est pas un nombre. Veuillez recommencer S.V.P.\n"
    return bsn
                     
def choixdunombre(b):
    ok=0
    while not ok:
        nb=raw_input("Entrer le nombre à convertir : ").upper()
        chfr='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'[:b]
        for car in nb:
            if car not in chfr:
                print 'Désolé, '+car+' n\'existe pas en base '+str(b)+'. Veuillez recommencer, S.V.P\n'
                break
            else:
                ok=1
    return nb

def versdix(s,b):
    l,nb,s=len(s),0,s[::-1]
    chfr='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    for i in xrange(l):      
        nb+=chfr.find(s[i])*b**i
    return nb

def versbase(nbcr,b):
    nb,nbdiv='',int(log(nbcr)//log(b))+1
    chfr='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    for i in xrange(nbdiv):
        nbcr,r=nbcr//b,nbcr%b
        nb=chfr[r]+nb
    return nb                    

print "         ******************************************"
print "         *         Conversion d'un nombre         *"
print "         *      d'une base X vers une base Y      *"
print "         ******************************************\n\n"


bd=choixbase(0,0)
nb=choixdunombre(bd)
ba=choixbase(9,bd)

# Affichage des données
print'\n Le nombre'
print '    '+nb
print ' écrit en base',bd

# Calculs
if bd!=10:
    nbcr=versdix(nb,bd)
else:
    nbcr=int(nb)
if ba !=10:
    rep=versbase(nbcr,ba)
else:
    rep=str(nbcr)  

#Affichage de la réponse
print '\n s\'écrit'
print '    '+rep
print ' en base '+str(ba)

Je dois gagner  5 % minimum (10% maximum)...

@+

[EDIT]

Le nombre
    FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3A9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9A
 écrit en base 16

 s'écrit
    101201101110110202111020110110201022200011101001201120120121022111102211010101211100002101211220212021212201212220201100012022111020000110100002001101120210110200122101212000001020200202022020100120212100200002221010210202101201021111012001222122020212110222201011012220201200122120211121101202002100002222201000022120012122211202110220202221202210221011120212111221111220202112021010010222021121211122002220122201011121102111102210102110020011221000200111102210022212022222221201121200020220111210011021102101121210110000010020102010201022101211001012212102110021221111200220000102000121012200020011121220102020021222120022001122010022222001121112021210210110101121110020022111201100100000001120011202121001110112110201122012201201221212100211001212002102221122101110001112121210202210021001011200012222001101111101012100110111001212200101221001011110122012101200112021120222222121122222102100202120010220112111112201020021200011000221001101101122201000011122100222022021220122012010222200020110111010122120100111210202011022112221120212221221012210222200112010121022121021022212021011220002012120110120202101020200001221001202200210101002211111222210112101210201102001000000222012012022122202112021012021120210210001121011110210000110001102112021002121101102202221111100020111001201221210122102111121200120121001022000212011102101121222120011120101011210212010122220212222110202220001202222200010011002011120110212202120110201222012110102120100112010211220100102201011100221122121210220020111200020012101211011120211111212021020021020010001211211110100011211200010021200100012202121100000210121001002110222111210020012020020011202212121222012011201122100001210021222021202001020001021020022121000220210111010010111202100011102222211002021221101221220222100101021012002120122000020122022210011211212112012222102202220122112102222200000212011020201010201100120210222002210110112122211120210022100100020000202212200212010112200201201100010212222002020102020010010212122101120122201012000022212022012000102112201101101122022101210020122100012100101101111222121120211011200122001020011112202112020022201220112120000102221002010020101022102120100212010222101222022220022221200100021110121001100100222010
 en base 3

Temps (chez moi, machine triple cœur AMD) :  0.0912940052437 s pour le prog modifié...
Temps pour le prog de départ                      :  0.0958585518551 s pour la 1ere version.
Temps de calculs et affichage compris, mesure du temps commencé après les entrées
Soit un gain de 4,8 %...

Le nombre
    FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3FFEEDDCCBBAA3A9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFA9B8C7D6E5F4A3210BFFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9AFB0123A4F5E6D7C8B9A
 écrit en base 16

 s'écrit
    61431530782089653007580291764940972439387598945598821321963571323344723657990598367005901196428075232730601888615408387295466302549431064334536923133437273515968996329693829764599213208677523530806891005780548069796844628282725645203692014425153964752823921979178901346849859798703717790657323369535328182224766948698256241318977846740625513347578614032799042219273029776962840913445942260195537411448506125232487899357760638826029446013400772076707945855317842694837175209485071129205234841131585931616717604434917563225707773437460500555583418432881062737035015631692787119201137344301218346962761871850837377809667024856796381933684293808677104417150543244833064870335194607723412534181154699671282848432593657120215815987349347399724084505580743428267765231041298670509612052205233781439578276271972174515800705568637491252310718854758680117573172072324900242558495683740164969131493805293286031191053870458219356307067862970500012662176776451162352983474513068711844518570921181386475981819507775806724072937844882860396916803544577177980537754
 en base 10

Ce qui représente un nombre de 1049 chiffres (!) obtenu en 0.046867409126 : 4,7 centièmes de seconde, temps mesuré après l'affichage des données !

A noter que la conversion déjà implémentée en python reste bien plus rapide : 0.0271942383739 soit environ 42 % de temps en moins...
Syntaxe : int('nombre',base).

Je serais heureux que quelqu'un s'attelle à cet exercice et réussisse à faire plus vite que moi : j'ai beau chercher, je pense avoir épuisé toutes les ressources que je connais !

A vos claviers ! :-)


Arx Tarpeia Capitoli proxima...

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
cinq plus deux
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums