दूसरे दिन मेरे रसायन विज्ञान के शिक्षक हमें वैज्ञानिक संकेतन के बारे में समझा रहे थे (छोटी संख्या का उपयोग करके और बड़ी संख्या को आसानी से व्यक्त करने के लिए इसे दस की शक्तियों से गुणा करना), जिसने मुझे पहली बार सीखने पर कुछ साल वापस लाए। मूल बातें सीखने के बाद, हमने सामान्य गणित के प्रश्नों का एक समूह बनाया था, जिनमें से कुछ निम्नलिखित थे:
वैज्ञानिक संकेतन में निम्नलिखित का प्रतिनिधित्व करें:
a) 50000000
b) 120000000000000
c) 90000000000000000000000000000000000000
d) pi ^ e ^ i ^ j ^ k ^ std :: वेक्टर
...
z) 200
...
और मैंने सोचा, "क्या? हमें बताया गया था कि वैज्ञानिक संकेतन का उपयोग बड़ी संख्या में लेखन को अधिक कुशल बनाने के लिए किया गया था, लेकिन कुछ मामले बिल्कुल भी कुशल नहीं हैं!"
संख्या पर विचार करें
300
और वैज्ञानिक अंकन में इसका प्रतिनिधित्व:
3x10^2
क्या, वैज्ञानिक रूप से प्रसिद्ध संस्करण वास्तव में अधिक स्थान लेता है? हम नहीं कर सकते कि अब हम कर सकते हैं? (स्क्रीन स्पेस अनमोल है।)
हम खुद को निर्धारित कर सकते हैं कि यह वैज्ञानिक नोटेशन में नंबर लिखने के लिए अधिक स्पेस कुशल है या नहीं, या ...
कार्य
आपके प्रोग्राम या फ़ंक्शन को इनपुट का एक धनात्मक संख्या nके रूप में मनमाना आकार (आपकी भाषा का समर्थन करता है) तक ले जाना चाहिए और संख्या के वैज्ञानिक रूप से नोट किए गए संस्करण को आउटपुट करना चाहिए।
हालाँकि, यदि मूल संख्या n, अनुगामी शून्य और अनुगामी दशमलव स्थान को हटाने के बाद, इसके वैज्ञानिक रूप से संकलित संस्करण की तुलना में प्रदर्शित करने के लिए कम या उतने ही वर्णों की आवश्यकता होती है, तो आपको nइसके बजाय उस मूल संख्या को आउटपुट करना होगा ।
आपके कोड को जितना संभव हो उतना छोटा होना चाहिए क्योंकि आउटपुट भी जितना संभव हो उतना कम होना चाहिए।
विशेष विवरण
कुशल वैज्ञानिक अधिसूचना को निम्नानुसार परिभाषित किया गया है:
bx10^e
bइनपुट संख्या को 10 की शक्तियों द्वारा उचित रूप से विभाजित किया गया है 1 <= b < 10। इस संख्या में सभी अनुगामी शून्य (और यदि आवश्यक हो तो दशमलव बिंदु) होना चाहिए, लेकिन मूल संख्या (आपकी भाषा में दशमलव बिंदु सीमा तक) की सटीकता होनी चाहिए। Ie 90000हो जाता है 9, 13.500बन जाता है 1.35, आदि। यदि यह संख्या समाप्त 0.000675हो जाती है , 6.75जिसमें आपकी भाषा की तुलना में अधिक दशमलव स्थान होते हैं, तो इसे उस अधिकतम दशमलव स्थानों पर गोल किया जाना चाहिए।
eवह घातांक है जिसको दस इस तरह से उठाया जाता है n = b x 10^e(याद रखें कि यदि यह संख्या n1 से छोटी है तो नकारात्मक होना चाहिए )। इस संख्या में कोई अनुगामी शून्य या दशमलव स्थान नहीं होना चाहिए (मुख्यतः क्योंकि अगर यह पूर्णांक नहीं है तो कुछ गलत है ...)।
अक्षर वैसे ही बने रहने x10^ चाहिए जैसे बीच में स्ट्रिंग में bऔर e।
परीक्षण के मामलों
Input -> output
1 -> 1
20 -> 20
3000000 -> 3x10^6
400000 -> 400000
0.008093 -> 0.008093
0.007835000000000 -> 0.007835
0.000003000000 -> 3x10^-6
0.00000065 -> 6.5x10^-7
0 -> 0
स्कोरिंग
यह कोड-गोल्फ है , इसलिए बाइट्स जीत में सबसे छोटा कोड है।
अन्य नियम और स्पष्टीकरण
- अनुगामी शून्य (और / या अनुगामी दशमलव स्थान) को मूल इनपुट संख्या की वर्ण गणना की ओर नहीं गिना जाता है
n। टेस्ट केस 6 जैसे मामलों को ध्यान में रखें - आप यह मान सकते हैं कि यदि इनपुट नंबर 1 से कम है, तो यह हमेशा 0 अंक वाले स्थान पर शुरू होगा (जैसा कि परीक्षण मामलों में 5-8)।
- इनपुट नंबर कभी भी नकारात्मक नहीं होगा
- बिल्ट-इन जो इस चुनौती को तुच्छ बनाते हैं और मानक खामियों को रोक दिया जाता है
- आउटपुट में एक अनुगामी न्यूलाइन ठीक है
EDIT
धन्यवाद परीक्षण के मामलों की ओर इशारा करते हुए user81655 के लिए धन्यवाद 7 और 8 में दस की गलत शक्तियां थीं। मैंने अब उन्हें ठीक कर दिया है ताकि यह सुनिश्चित हो सके कि आपका कोड उनका सही मूल्यांकन करता है।
e: 9000 -> 9e3(लगभग 9,000 से अधिक !)
x10^। और यह सवाल पर एक उचित सा काम होगा, जो मुझे नहीं लगता कि यह अब उचित है कि यह पोस्ट किया गया है
pi^e^i^j^k^std::vectorहोगा?