2009-04-17 13 views

Respuesta

8

Pseudocódigo:

bases = [24, 60, 60] 
input = 86462      #One day, 1 minute, 2 seconds 
output = [] 

for base in reverse(bases) 
    output.prepend(input mod base) 
    input = input div base   #div is integer division (round down) 
5

Número -> set:

factors = [52,7,24,60,60,1000] 
value = 662321 
for i in n-1..0 
    res[i] = value mod factors[i] 
    value = value div factors[i] 

Y a la inversa:

Si tiene el número como el 32 (52), 5 (7), 7 (24), 45 (60), 15 (60), 500 (1000) y desea que se convierta en decimal:

Tome el número n, multiplíquelo con el factor n-1, cont inue para n-1..n = 0

values = [32,5,7,45,15,500] 
factors = [52,7,24,60,60,1000] 

res = 0; 
for i in 0..n-1 
    res = res * factors[i] + values[i] 

Y usted tiene el número.

+0

La pregunta pide lo contrario de esto. – Artelius

+0

Sí, lo corrigió. No despierto todavía –

+0

Claramente. En AMBOS ejemplos, sus bucles for están atravesando en el orden incorrecto. – Artelius

1

me ocurrió con una tan buena método ligeramente diferente, y probablemente no como los otros que están aquí, pero pensé que me gustaría compartir todos modos:

var theNumber = 313732097; 

//    ms s m h d 
var bases = [1000, 60, 60, 24, 365]; 
var placeValues = []; // initialise an array 
var currPlaceValue = 1; 

for (var i = 0, l = bases.length; i < l; ++i) { 
    placeValues.push(currPlaceValue); 
    currPlaceValue *= bases[i]; 
} 
console.log(placeValues); 
// this isn't relevant for this specific problem, but might 
// be useful in related problems. 
var maxNumber = currPlaceValue - 1; 


var output = new Array(placeValues.length); 

for (var v = placeValues.length - 1; v >= 0; --v) { 
    output[v] = Math.floor(theNumber/placeValues[v]); 
    theNumber %= placeValues[v]; 
} 

console.log(output); 
// [97, 52, 8, 15, 3] --> 3 days, 15 hours, 8 minutes, 52 seconds, 97 milliseconds 
+0

Creo que puedes usar Math.DivRem en tu segundo ciclo. output [v] = Math.DivRem (theNumber, placeValues ​​[v], out theNumber); – Hafthor

Cuestiones relacionadas