2009-04-17 12 views
6

आप दशमलव संख्या को mixed radix नोटेशन में कैसे परिवर्तित करते हैं?दशमलव को मिश्रित-रेडिक्स (आधार) संख्या में परिवर्तित करना

मुझे लगता है कि प्रत्येक आधार की एक सरणी का इनपुट दिया गया है, और दशमलव संख्या, इसे प्रत्येक कॉलम के मानों की एक सरणी आउटपुट करनी चाहिए।

उत्तर

8

स्यूडोकोड:

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

संख्या -> सेट:

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] 

और रिवर्स:

यदि आपके पास की तरह 32 (52) संख्या, 5 (7), 7 (24), 45 (60), 15 (60), 500 (1000) और आप इसे दशमलव में परिवर्तित करना चाहते हैं:

संख्या संख्या लें, इसे एन -1 के कारक के साथ गुणा करें, cont एन-1..एन = 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] 

और आपके पास संख्या है।

+0

सवाल इस के विपरीत के लिए पूछता है। – Artelius

+0

हां इसे सही किया। अभी तक जाग नहीं है। –

+0

स्पष्ट रूप से। दोनों उदाहरणों में आपके लूप गलत क्रम में चल रहे हैं। – Artelius

1

मैं अन्य लोगों को यहाँ के रूप में एक अलग, और शायद नहीं के रूप में अच्छा तरीका के साथ आया था, लेकिन मैंने सोचा कि मैं वैसे भी साझा करते हैं:

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

मुझे लगता है कि आप अपने दूसरे पाश में Math.DivRem का उपयोग कर सकते हैं। आउटपुट [v] = Math.DivRem (Number, placeValues ​​[v], संख्या से बाहर); – Hafthor

संबंधित मुद्दे