0
1

অনেক সময় অনেক প্রবলেমে এমন অনেক ডাটা দেওয়া থাকে,যাকে long long integer ব্যাবহার করেও ধারন করা যায়না। তখন কীভাবে ওই বিশাল ডাটা নিয়ে কাজ করব? শুনেছি তখন integer কে string হিসেবে ইনপুট নিয়ে কাজ করতে হয়। কিন্তু procedure টা ঠিকমত জানিনা। একটু বিস্তারিত জানতে চাই।

asked 31 Mar '15, 06:41

Hafiz%20Al%20Asad's gravatar image

Hafiz Al Asad
235216

edited 31 Mar '15, 15:29


C তে string আর C++ এ BigInteger এর class ব্যবহার করে কিছু স্বল্প কমপ্লেক্সিটির প্রবলেম সলভ করা যায়। তবে সহজে সঠিক সমাধান দ্রুত পেতে জাভা ব্যবহার করাটাই শ্রেয়। আর যদি #জাভা কিংবা #সি_প্লাস_প্লাস কোনোটা সম্পর্কে বিস্তারিত ধারণা না থাকে ,অর্থাৎ #সি দিয়েই করতে হবে এমন হয় তখন এই string অপারেশন বিকল্প কাজ দেয়। তবে এই পদ্ধতিতে BigInteger এর Basic arithmatic গুলোই করা যায় শুধু। জটিল সমস্যা সমাধানের জন্যে এটা উপযোগী নয়। এবার বলি কিভাবে কাজটা করবে সাধারণ সমস্যা সমাধানেঃ ধরো, আমাকে ইনপুট হিসেবে দুটো নাম্বার দেয়া হবে (যাদের প্রত্যেকের সর্বোচ্চ 5000 ডিজিট পর্যন্ত থাকতে পারে)। long long int দিয়েও শত ডিজিটের ভ্যালু স্টোর করা যায় না , হাজার ডিজিট তো ইম্পসিবল। তখন ভ্যালু টা আমি একটা string এ রাখতে পারি। ধরি (বুঝার জন্য) সংখ্যা দুটো শুধু ডিজিট ২ দিয়ে তৈরী। তাহলে,

char s1[5000],s2[5000],sum[5000];<br>
s1[]="22222222.......222"; <br>
s2[]="2222222222.....22";

এরপর ছোটবেলায় যেভাবে যোগ করতাম সেভাবে পেছন থেকে একই পজিশন যোগ করে করে নতুন একটা string বানিয়ে ফেললেই কাজ শেষ।

sum[i]=(s1[i]-'0')+(s2[i]-'0'); <br>
sum[i]=sum[i]+'0'; <br>
/**substracting '0' from a character makes it's ASCII value equal to it's number value**/

অতএব,

sum[]="444444......44";

এটাতো সহজেই হয়ে যায় ,কিন্তু ঝামেলা টা শুরু হয় যখন পজিশন গুলোর ভ্যালু গুলোর যোগফল একাধিক ডিজিটের আসে। তখনো চিন্তার কিছু নেই। প্রাপ্ত সংখ্যাটাকে 10 দিয়ে mod করে অই পজিশনে ভ্যালুটা রেখে, আবার 10 দিয়ে integer division করে প্রাপ্ত ভ্যালুটা পরের পজিশনে শুরুতেই যোগ করে দিলেই হয়ে যায়(অনেকটা হাতে রেখে পরের সারির শুরুতে যোগ করার মতো)। আশা করি তুমি অন্তত পদ্ধতিটা বুঝেছো। এটাকে মোডিফাই করে আরো বড় সমস্যার জন্য ব্যবহার করতে পারবে। আশা করি কিছুটা অন্তত বুঝেছো।

permanent link

answered 31 Mar '15, 18:00

saifbgc's gravatar image

saifbgc
1166

edited 31 Mar '15, 19:41

__salman__'s gravatar image

__salman__ ♦♦
1.1k211

1

উত্তর দিতে হবে উত্তরের দেয়ার জায়গায়। তুমি কমেন্ট করার জায়গায় উত্তর দিয়েছিলে। আর কেবল প্রয়োযনীয় কথাই থাকবে উত্তরে।

(31 Mar '15, 19:47) __salman__ ♦♦
1

thanks dost. শেষ পর্যন্ত তোর কাছেই সঠিক সমাধান পাইলাম। :) @saifbgc

(01 Apr '15, 03:01) Hafiz Al Asad

Thanks Mr. Salman...
আমি এই সাইটে নতুন... আর উত্তরটা দেয়ার সময় তাড়াহুড়োর মাঝে ভুলটা হয়ে গেছে... I will be careful next time :-)

(08 Apr '15, 10:13) saifbgc

জাভাতে BigInteger দিয়ে অনেক বড় বড় ক্যালকুলেশনের কাজ খুব সহজে করা । কিছু মেথড কল করলেই হয়ে যায় । বিস্তারিত জানার এবং বুঝার জন্য সুবিন ভাইয়ের ব্লগে বিগ ইন্টিজার একটা লেখা আছে সেটা পড়ে নিলে আপনার ভালভাবে জানা হয়ে যাবে । লেখাটার লিঙ্ক নিচে দিয়ে দিলাম।

http://blog.subeen.com/tag/বিগ-ইন্টিজার/

permanent link

answered 31 Mar '15, 11:13

Tamanna%20Nishat%20Rini's gravatar image

Tamanna Nishat Rini ♦♦
3.0k312

edited 31 Mar '15, 13:45

__salman__'s gravatar image

__salman__ ♦♦
1.1k211

আমি সি এর ক্ষেত্রে কীভাবে Big integer নিয়ে কাজ করে তা জানতে চেয়েছি। কিন্তু সুবিন ভাইয়ের ব্লগে শুধুমাত্র জাভা দিয়ে কীভাবে কাজ করা যায়, তা বলা আছে।

(31 Mar '15, 15:09) Hafiz Al Asad

দুঃখিত আমি প্রশ্নটা ঠিকমত বুঝতে পারি নাই । সি এর ক্ষেত্রে বিগ ইন্টিজার নিয়ে কাজ করা একটু কঠিন । GMP নামক একটা লাইব্রেরী আছে । এটা ব্যবহার করে বিগ ইন্টিজারের কাজগুলো করা যায় সি দিয়ে।

https://gmplib.org/ এই লিঙ্কে গেলে আপনি GMP সম্পর্কে জানতে পারবেন । লাইব্রেরীটা ডাউনলোড করে নিয়ে কাজ করা যাবে ।

(31 Mar '15, 15:50) Tamanna Nishat Rini ♦♦
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×402

question asked: 31 Mar '15, 06:41

question was seen: 1,791 times

last updated: 08 Apr '15, 10:13