আপনি যখন কোনও ভগ্নাংশকে দশমিক সংখ্যায় রূপান্তর করেন এবং আপনি এই সংখ্যাটি সংরক্ষণ করতে চান, আপনাকে প্রায়শই এটি গোল করতে হয় কারণ আপনি কেবলমাত্র একটি নির্দিষ্ট পরিমাণের মেমরি ব্যবহার করতে চান। ধরা যাক আপনি কেবলমাত্র 5 দশমিক অঙ্ক সংরক্ষণ করতে পারবেন, তারপরে 5/3 হবে 1.6667। আপনি যদি মাত্র 2 দশমিক অঙ্ক সঞ্চয় করতে পারেন তবে এটি 1.7 হবে (এখন ধরে নেওয়া যে এটি সর্বদা 0 থেকে 9.99 এর মধ্যে থাকে)।
আপনি যদি এখন এই প্রক্রিয়াটি 1.7 এর সাথে উল্টো করার চেষ্টা করেন এবং আপনি আপনার ভগ্নাংশটি ফিরে পেতে চান তবে এটি কঠিন হতে পারে, কারণ আপনি জানেন যে 1.7 কেবল একটি গোলাকার সংখ্যা। অবশ্যই আপনি 17/10 চেষ্টা করতে পারেন তবে এটি 'মার্জিত' 5/3 এর তুলনায় বরং 'কুশ্রী' ভগ্নাংশ।
সুতরাং লক্ষ্যটি এখন সর্বনিম্ন ডিনোমিনেটর বি এর সাথে ভগ্নাংশ a / b সন্ধান করছে, এটি সঠিকভাবে গোল করার সময় গোলাকার দশমিক সংখ্যার ফলস্বরূপ।
বিস্তারিত
ইনপুটটিতে 1 পর্যন্ত 5 টি সংখ্যার একটি স্ট্রিং রয়েছে যা '(সহ) 0 এবং 10 (অন্তর্ভুক্ত নয়) এর মধ্যে থাকে' ' প্রথম অঙ্কের পরে ধরা যাক n
অঙ্কের সংখ্যা বোঝায়। আউটপুট অবশ্যই দুটি পূর্ণসংখ্যার একটি তালিকা / অ্যারে [numerator, denominator]
বা যুক্তিযুক্ত ডেটাটাইপ (আপনি নিজের তৈরি করতে পারেন বা বিল্ট-ইন ব্যবহার করতে পারেন) যেখানে অংকটি নেতিবাচক এবং ডিনোমিনিটারটি ইতিবাচক। ভগ্নাংশের n
অঙ্ক বা ডিনোমিনেটরটি অবশ্যই সঠিকভাবে অঙ্কগুলিতে গোল করে (যার অর্থ n-1
দশমিক বিন্দুর পরে অঙ্কগুলি)।
বিধিনিষেধ: শুধুমাত্র একটি লুপ বিবৃতি অনুমোদিত। এর অর্থ হ'ল আপনি আপনার পুরো কোডটিতে কেবলমাত্র একটি একক লুপিং স্টেটমেন্ট (যেমন for
বা while
বা goto
ইত্যাদি পাশাপাশি ফাংশনাল লুপগুলি map
বা fold
তালিকা / অ্যারের প্রতিটি উপাদানকে কোড প্রযোজ্য) ব্যবহার করতে পারেন তবে আপনি এটি 'আপত্তি' মুক্ত করতে পারেন বা পুনরাবৃত্তি ইত্যাদি ব্যবহার করুন
আপনার একটি ফাংশন লেখা উচিত। যদি আপনার ভাষার ফাংশন না থাকে (বা এমনকি এটি হয় তবে), আপনি বিকল্পভাবে ধরে নিতে পারেন যে ইনপুটটি একটি ভেরিয়েবলে (বা স্টিডিনের মাধ্যমে ইনপুট) সঞ্চিত আছে এবং ফলাফলটি মুদ্রণ করতে পারে বা কোনও ফাইলের কাছে লিখতে পারে। সর্বনিম্ন সংখ্যা বাইট জিতেছে।
রাউন্ডইং
রাউন্ডিংটি 'প্রচলিত' রাউন্ডিং নিয়মগুলি অনুসরণ করা উচিত, অর্থাত্ যদি শেষ সংখ্যাটি কেটে ফেলা হয় তবে 5 বা তার বেশি হয়, আপনি গোল হয়ে যাবেন এবং আপনি অন্য কোনও ক্ষেত্রে গোল করবেন, যেমন:
রাউন্ড করার সময় 4.5494 ফলাফল আসবে
- 1 ডিজিট: 5
- 2 সংখ্যা: 4.5
- 3 সংখ্যা: 4.55
- 4 সংখ্যা: 4.549
উদাহরণ
নিম্নলিখিত পরীক্ষার কেস এবং অন্যান্য 'আকর্ষণীয়' বিষয়গুলি অন্তর্ভুক্ত করুন:
Input 1.7 Output 5/3
Input 0. Output 0/1
Input 0.001 Output 1/667
Input 3.1416 Output 355/113
for n in numbers: f(g(n))
সমান map(f, map(g, numbers))
। ক্রিয়ামূলক সংস্করণটি map
দু'বার ব্যবহার করে, এটি কি সত্যই বাতিল করা উচিত?
repeat
তার যুক্তির অসীম তালিকা তৈরি করে। আমি লুপ মনে করি না তবে এটিতে ও (1) এর সময় জটিলতা রয়েছে। তবে আমি অনুমান করি যে প্রতিটি ক্ষেত্রে পৃথকভাবে বাছাই করা কার্যকরী ভাষা না দেওয়ার চেয়ে ভাল।