Wednesday, July 12, 2017

10035 - Primary Arithmetic Uva Problem Solution & Logic

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=976

ছোট বেলায় আমরা প্রথম যখন যোগ করা শিখি , তখন আমরা হিসেব করতাম হাতে কত থাকে ?? ধরো , যোগ করতে বললো    555 + 555

তাহলে , ডান দিক থেকে শুরু করি - ৫+৫ =১০   বসাবো   ০ , হাতে থাকবে ১
                  তারপর ৫+৫ = ১০ এর সাথে হাতে থাকা ১ যোগ করলাম তাহলে হলো ১১ বসাবো ১
     হাতে থাকলো , আবারো ১ ।
  তারপর , ৫+৫=১০ এর সাথে হাতে থাকা ১ যোগ করে পেলাম ১১ , বসাই ১ . আবার হাতে থাকে ১ ।।
আর কোনো , কিছু নাই সুতরাং হাতে থাকা ১ বসিয়ে দেই , তাহলে মোট যোগফল পেলাম ১১১০।

এখন এই যোগ করার সময় হাতে থাকার ঘটনা ঘটলো , মোট ৩ বার সেটাই হবে আমাদের উত্তর ।হাতে থাকার এই ঘটনাকে আমাদের প্রোগ্রামের ভাষায় carry বলে । চলো , কোড দেখি ------------


 #include<bits/stdc++.h>

// Nayeem Mollick Joy ,Applied Physics & Electronic Engineering , University of Rajshahi.

using namespace std;

int main()
{
   long long int a,b;
   while(cin>>a>>b)
   {
       int carry=0,count=0;
       if(a==0&&b==0)
       {
           break;
       }
       while(a||b)
       {
           carry=(a%10+b%10+carry)/10;    // শেষ এর ডিজিট গুলো যোগ করছি , সেই জন্য ১০ দিয়ে ভাগ করে ভাগশেষ গুলো যোগ করছি //
           a=a/10;   // ১ টা করে ডিজিট যোগ করছি , আর - সেটা ১০ দিয়ে ভাগ করলেই যে ভাগফল পাবো , সেটাতে আর শেষ এর ডিজিট'টা  থাকছে না , এভাবেই একটা করে ডিজিট কমাতে থাকবো , শেষ এর থেকে //
           b=b/10;
           if(carry) // হাতে , কিছু আছে কি না ?? সেটা চেক করছি , যদি থাকে -তাহলে count এক করে বাড়তে থাকবে //
           {
               count++;
           }

       }

       if(count==0)
       {
           cout<<"No carry operation."<<endl;
       }
       else if(count==1)
       {
           cout<<count<<" carry operation."<<endl;
       }
       else{
       cout<<count<<" carry operations."<<endl;
       }
   }
   return 0;
}

No comments:

Post a Comment