कंप्यूटर में वेरिएबल को मेमोरी लोकेशन में स्टोर किया जाता है। लेकिन मेमोरी लोकेशन का आकार निश्चित होता है, इसलिए जब हम कुछ बड़े मान जैसे 15! या 20! भाज्य मान स्मृति सीमा से अधिक है और गलत परिणाम देता है।
बड़ी संख्या की गणना के लिए, हमें परिणामों को संग्रहीत करने के लिए एक सरणी का उपयोग करना होगा। सरणी के प्रत्येक तत्व में, परिणाम के विभिन्न अंक संग्रहीत कर रहा है। लेकिन यहां हम कुछ संख्या को सीधे सरणी से गुणा नहीं कर सकते हैं, हमें परिणाम सरणी के सभी अंकों के लिए मैन्युअल गुणा प्रक्रिया करनी होगी।
इनपुट और आउटपुट
इनपुट:एक बड़ी संख्या:50आउटपुट:दी गई संख्या का गुणनखंड है:30414093201713378043612608166064768844377641568960512000000000000
एल्गोरिदम
गुणा करें(x, गुणा करें)
इनपुट: संख्या x, और एक सरणी के रूप में बड़ा गुणक।
आउटपुट: गुणन के बाद परिणाम।
आरंभ करें:=0 गुणक के सभी अंकों i के लिए, उत्पाद करें:=i*x+carry i:=prod mod 10 ले जाने के लिए:=उत्पाद / 10 कैरी करते समय 0, इन्सर्ट करें (कैरी मॉड 10) पर गुणक का अंतफैक्टोरियल(एन)
इनपुट: संख्या n.
आउटपुट: n का भाज्य ज्ञात कीजिए।
परिणाम सरणी को परिभाषित करना शुरू करें। i :=2 से n के लिए परिणाम में 1 डालें, गुणा करें (i, परिणाम) किया परिणाम वापसी परिणाम को उलट देंअंतउदाहरण
#शामिल करें // इनिशियलाइज़ कैरी टू 0 वेक्टर::iterator i; के लिए (i=multiplicand.begin(); i!=multiplicand.end(); i++) {// गुणा x गुणक के सभी अंकों के साथ int prod =(*i) * x + कैरी; *i =उत्पाद% 10; // उत्पाद कैरी का केवल अंतिम अंक डालें =उत्पाद/10; // शेष भाग को कैरी के साथ जोड़ें} जबकि (कैरी) {//जब कैरी मौजूद है मल्टीप्लिकैंड। पुश_बैक (कैरी% 10); कैरी =कैरी/10; }}शून्य भाज्य (int n) {वेक्टर परिणाम; परिणाम.पुश_बैक(1); // पहले स्टोर 1 पर परिणाम के रूप में (int i=2; i<=n; i++) गुणा करें (i, परिणाम); // गुणा संख्या 1*2*3*......*n cout <<"दी गई संख्या का गुणनखंड है:"< ::iterator it; // परिणाम के क्रम को उलट दें के लिए (यह =परिणाम। शुरू (); यह! =परिणाम। अंत (); यह ++) cout <<*it;}int main() { factial(50);} आउटपुट
दी गई संख्या का गुणनखंड है:30414093201713378043612608166064768844377641568960512000000000000