বিগ ইন্টিজার রিমেইন্ডার (Big Integer Remainder)







সাধারনত ইন্টিজার, লং লং ইন্টিজার এর রিমেইন্ডার বের করার সময় আমরা  % অপারেটর ব্যবহার করে রিমেইন্ডার বের করি। কিন্তু যদি অনেক বড় সংখ্যা যেমন  ১০১০০  এর মত বড় সংখ্যার রিমেইন্ডার বের করতে চাই তাহলে কিন্তু লং লং ডাবল এ ও জায়গা হবে না। কিন্তু আমরা স্ট্রিং এ সেই বড় সংখ্যাটি নিতে পারব। তারপর এক একটি ডিজিটকে নামিয়ে আমরা ভাগশেষ বের করেই চলব যতক্ষন না সংখ্যাটি শেষ হয়।

সেক্ষেত্রে আমাদের ছোটবেলায় ফিরে যেতে হবে। ক্লাস ওয়ান এ চলে যাই। ১৪৬৪ কে ১২
দ্বারা ভাগ করে ভাগশেষ বের করব।





  

উপরের ভাগশেষ নির্নয়ে আমরা কিন্তু একটির পর একটি ডিজিট নামিয়ে ভাগশেষ বের করে আসছি। পুরো ডিজিট কে একসাথে ভাগ করি নাই। তাহলে একইভাবে আমরা ভাগশেষ বের করব ।  প্রথমে, ভাগশেষ হল=০ । এরপর ১ কে ১২ দ্বারা ভাগ করে ভাগশেষ বের করি যা ১ আসে।

                        

দ্বিতীয়ত , ৪ কে নামাই তাহলে সংখ্যাটি হয় (১*১০)+৪=১৪ । এবার আবার ১৪ কে আ২ দ্বারা ভাগ করে ভাগশেষ বের করি যা ২।


                   

        তৃতীয়ত, আবার পরের ডিজিট ৬ নামাই  । তাহলে সংখ্যাটি হয় (২*১০)+৬=২৬ ।    এবার ২৬ কে ১২ দ্বারা ভাগ করে ভাগশেষ বের করি যা ২।                  

                     

চতুর্থত ,  সর্বশেষ ডিজিট  ৪ নামাই। তাহলে সংখ্যাটি হয় (২*১০)+৪=২৪। এবার ২৪ কে ১২ দ্বারা ভাগ করে ভাগশেষ পাই ০।

                       




                       



যেহেতু আর কোন ডিজিট নাই তাই  ভাগশেষ করার প্রক্রিয়া শেষ এবং সর্বশেষ ভাগশেষটি হল উত্তর যা  ০ ।


কোডিং অংশ ঃ

সূত্র ঃ

                     ভাগশেষ= (ভাগশেষ*১০+ভাজ্য সংখ্যার এক একটি ডিজিট) % ভাজক

 যেমনঃ প্রথমে ভাগশেষ =০ এবং ১৪৬৪ এর প্রথম ডিজিট ১ তাই

ভাগশেষ =(০*১০+১)%১২=১

তারপর আসবে ১৪৬৪ এর দ্বিতীয় ডিজিট যা ৪

ভাগশেষ =(১*১০+৪)%১২=২

এভাবে শেষ ডিজিট পর্যন্ত যাবে। বাকিটা নিজে খাতায় করে ফেলো।

   
স্ট্রিং এ যেহেতু  প্রতি ডিজিট কে ক্যারেক্টার হিসেবে নেয়া হয়েছে তাই সংখ্যায় রূপান্তর এর জন্য ক্যারেক্টার- ‘০’ করতে হবে  ।

বিগ রিমেইন্ডার এর সি++ কোডঃ

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    long long int n,d,i,r=0;
    cout<<"Enter Dividend And Divisor"<<endl;
    cin>>s>>d;
    for(i=0;i<s.length();i++)
    {
        r=(r*10+(s[i]-'0'))%d;
    }
    cout<<"Remainder is="<<r<<endl;
    return 0;

}

এই টপিক বুঝে থাকলে অনুশীলন করতে পারো অনলাইন জাজ এর প্রব্লেম নিয়ে।  এই টপিক রিলেটেড কিছু প্রব্লেম দেয়া হল ঃ 

UVA 11879 Multiple Of 17, UVA 10070 Leap Year Or Not Leap Year And..........   , LightOJ 1078 Integer Divisibility, LightOJ 1214 Large Division




Share on Google Plus

About Ashadullah Shawon

I am Ashadullah Shawon. I am a Software Engineer. I studied Computer Science and Engineering (CSE) at RUET. I Like To Share Knowledge.
    Blogger Comment
    Facebook Comment

0 comments:

Post a Comment