2009-02-25 20 views
20

पर जाने से पहले नंबर को निकटतम दूसरे नंबर पर गोल करने की आवश्यकता है। ऐसा करने के कई तरीके हैं, लेकिन सबसे अच्छा और सबसे छोटा एल्गोरिदम क्या है? एक चुनौती :-) के लिए किसी को भी अपनिकटतम 100

1244-> 1200
1254-> 1300
123-> 100
178-> 200
1576-> 1600
1449-> 1400
123456- > 123500
654321-> 654,300
23-> 00
83> 100

+0

गहरे लाल रंग का ठीक होना चाहिए – Senthoor

उत्तर

28

इनपुट n के लिए:

(n + 50)/100 * 100 

पूर्णांक विभाजन के प्रयोग से।

ध्यान दें कि कई भाषाओं/पुस्तकालयों में पहले से ही ऐसा करने के लिए कार्य हैं।

+4

जावास्क्रिप्ट में, यह मेरे लिए काम करता है: 100 * Math.floor ((n + 50)/100); इस पर जीत के लिए –

0

इस होमवर्क है?

आम तौर पर, मॉड 100, फिर अगर> 50 अन्य घटाएं।

+0

कोई अपने घर का काम नहीं :-) – Senthoor

+0

क्या हो ब्रायन! mod और if-then-else यह वास्तव में धीमा होने वाला है। यदि आप पूर्णांक का उपयोग कर रहे हैं तो डेविड का जवाब देखें। यह इस समस्या को हल करने के लिए एक शाखा-कम आम तरीका है। यह फ्लोटिंग-पॉइंट नंबरों के साथ भी काम करता है। –

+0

मैं खुद रूबी में इस जवाब के साथ आया था। numbers.each {| संख्या | संख्या + '->' + number.gsub (/ \ d \ d \ d $ /, (संख्या [संख्या.size-3,1] .to_i + संख्या [संख्या.size-2,1] .to_i/5 रखता है) .to_s + '00 ')} – Senthoor

2

यह यह करना होगा, आप पूर्णांक गणित उपयोग किए जा रहे:

n = (n + 50)/100 * 100 
बेशक

, आप जैसे, 1350 और 1450 व्यवहार निर्दिष्ट नहीं किया है, इसलिए मैं ऊपर दौर का विकल्प चुना है। यदि आपको गोल करने की भी आवश्यकता है, तो यह काम नहीं करेगा।

4

मैं जानता हूँ कि यह खेल में देर हो चुकी है, लेकिन यहाँ कुछ मैं आम तौर पर की स्थापना की है जब मैं निकटतम वें करने के लिए चीजों को दौर के लिए होने के साथ काम कर रहा हूँ है:

Number.prototype.roundTo = function(nTo) { 
    nTo = nTo || 10; 
    return Math.round(this * (1/nTo)) * nTo; 
} 
console.log("roundto ", (925.50).roundTo(100)); 

Number.prototype.ceilTo = function(nTo) { 
    nTo = nTo || 10; 
    return Math.ceil(this * (1/nTo)) * nTo; 
} 
console.log("ceilTo ", (925.50).ceilTo(100)); 

Number.prototype.floorTo = function(nTo) { 
    nTo = nTo || 10; 
    return Math.floor(this * (1/nTo)) * nTo; 
} 
console.log("floorTo ", (925.50).floorTo(100)); 

मैं अपने आप को नंबर का उपयोग कर पाते हैं .ceilTo (..) क्योंकि मैं कैनवास के साथ काम कर रहा हूं और यह निर्धारित करने की कोशिश कर रहा हूं कि कितना दूर पैमाने पर है।

48

रूबी के दौर विधि नकारात्मक precisions उपभोग कर सकते हैं:

n.round(-2)

इस मामले में -2 आप पास सौ गोलाई हो जाता है।

+1

रूबी 2.0। – Dudo

+1

बहुत बेहतर। विजेता होना चाहिए। यह मूल उत्तर है। – Merovex

+1

आज मुझे कुछ सीख लिया! –

0

प्रति ऊपर पवन पिल्लई की टिप्पणी के रूप में, जावास्क्रिप्ट में 100 वीं पास करने के लिए गोलाई:
100 * Math.floor((foo + 50)/100);