আমাদের মাঝে মাঝে বিশাল কিছু সংখ্যার জন্য ভাগশেষ বের করতে হয়, যেমন ১০০০ ডিজিটের সংখ্যাকে আরেকটি ইন্টিজার(১০^৮ এর চেয়ে ছোট) দিয়ে ভাগ করে ভাগশেষ। এর জন্য জাভাতে BigInteger Library ব্যবহার করলেই হয়ে যায়। সিতে কাজটি করতে হয় স্ট্রিং-এর সাহায্য নিয়ে।
তোমরা যারা এই ইমপ্লিমেনটেশনের আরেকটু বিস্তারিত ভালোভাবে জানতে চাও,তারা সাদমান সাকিবের এই লিখাটা
পড়ে আসতে পারো।
চলে যাই মূল পর্বে…
এজন্য প্রথমেই আমরা নাম্বারটি ইনপুট নিব স্ট্রিং হিসেবে।
char number [12345];
scanf(“%s”, number);
এখন আমাদের স্ট্রিং-টিতে ডিজিটগুলা আছে character হিসেবে, তাদেরকে যদি আমরা ইন্টিজারে পরিণত করতে চাই, তাহলে প্রতিটি থেকে বিয়োগ করতে হবে ‘0’। কারণ ASCII Encoding-এ 0 থেকে 9 পর্যন্ত অংকগুলোর জন্য নির্ধারিত নাম্বার হল 48 থেকে 57। অর্থাৎ ‘1’ = 49 আর ‘0’ = 48, এখন ‘1’ থেকে ‘0’ বিয়োগ করলে পাওয়া যাবে 1, আমাদের কাঙ্ক্ষিত ইন্টিজার!
এখন আমরা যদি বিশাল সংখ্যাটাকে ২১ দিয়ে ভাগ করতে চাই, তাহলে যা করবো, তা হল প্রতিটি সংখ্যার জন্যই লুপের সাহায্যে mod21*10 + number[i] – ‘0’) % 21 বের করবো।
কোডটি হবে এমনঃ
ধরি ভাগশেষ mod21
int mod21 = 0; size = strlen(number); for(i = 0; i < size; i++) { mod21 = (mod21*10 + number[i] - '0') % 21; }
এই মেথডটার সাহায্যে UVA-তে 11879 – Multiple of 17 আর 10070 – Leap Year or Not Leap Year and … করা যাবে!
হ্যাপি কোডিং। ^_^
এইটা জোস! 😀
ধন্যবাদ। অনেক আগের লেখা! 😀