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;
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;
}
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