Saturday, July 15, 2017

DCP-330: Power Function Devskill Problem Solution & Logic

https://www.devskill.com/CodingProblems/ViewProblem/330

খুবই সহজ এবং মজার একটি প্রোবলেম । নীচের শর্ত অনুযায়ী কাজ করতে হবে ,

if x is a odd number then f(x) = (-1) * ( 2 ^ x ) , 
Otherwise f(x) = 2 ^ x .
 
 

 তোমায় , দেয়া সংখ্যাটি - জোড় নাকি , বিজোড় ?? এটার উপর ভিত্তি করে - আগে মাইনাস / প্লাস বসাতে হবে   । পাওয়ার এর কাজটুকু করার জন্য , আলাদা একটা পাওয়ার ফাংশন বানিয়ে নিবে । 

এখন কথা হলো , তোমায় একেবারে প্রথম ডিজিট'টা প্রিন্ট করতে হবে । এটা কিন্তু , ১০ দিয়ে ভাগ দিয়ে দিয়েই বের করা যায় । কিন্তু , আমরা কিন্তু - এখানে ,10 ভিত্তিক log ইউস করতে পারি । 

যেমন , তোমায় যদি বলে --- Log10(1000)=? তাহলে , কি হবে ?? উত্তর হবে , ৩ । মানে , ১০ এর উপরে ৩ হলে , আমরা ১০০০ মান'টি পাবো , এখন আমরা যদি - 1000 কে pow(10,3)/10^3 দিয়ে ভাগ দেই , তাহলে কিন্তু - কতো পাবো ? 1০০০/10^3 = 1 !! এর মানে , প্রথম ডিজিট পেয়ে গেছি , তাই না ?? ঠিক এই কাজটি , আমরা করবো - ধরো , দেয়া আছে - 6 তাহলে , পাওয়ার ফাংশনে হবে - (2^6)=64 | 

 এখন , log10(64) করলে , কি মান আসবে ??  1.8... এরকম কিছু , তাহলে - যেহেতু , আমরা যেহেতু int variable ইউস করবো , সুতরাং মান নিবে 1 হিসেবে .8 নিবে না  , অর্থাৎ প্রথম ডিজিট হবে - 64/pow(10,1) = 6 | চলো , এবার কোড দেখি --- 

 

#include<bits/stdc++.h>

using namespace std;

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

typedef unsigned long long llu;

llu pow(llu n)
{
    llu x=1,i;
    for(i=0;i<n;i++)
    {
        x=x*2;
    }
    return x;
}


int main()
{
    llu t,N,ans,m,y;
    cin>>t;
    while(t--)
    {
        cin>>N;
        m=log10(pow(N));
        y=pow(10,m);
        ans=pow(N)/y;
        if(N%2==0)
        {
            cout<<"+"<<ans<<endl;
        }
        else
        {
            cout<<"-"<<ans<<endl;
        }
    }
    return 0;
}
 

 

No comments:

Post a Comment