Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में n^x में अंकों का पुनरावर्ती योग, जहां n और x बहुत बड़े हैं

हमें 'num' और 'x' के रूप में धनात्मक पूर्णांक वेरिएबल दिए गए हैं। कार्य पुनरावर्ती रूप से num^x की गणना करना है, फिर परिणामी संख्या के अंकों को तब तक जोड़ना है जब तक एकल अंक प्राप्त न हो जाए, और परिणामी एकल अंक आउटपुट होगा।

विभिन्न इनपुट-आउटपुट परिदृश्य देखते हैं:

इनपुट: int num = 2345, int x = 3

आउटपुट: n^x में अंकों का पुनरावर्ती योग, जहां n और x बहुत बड़े हैं: 8

व्याख्या: हमें num और x के रूप में धनात्मक पूर्णांक मान दिए गए हैं जिनके मान 2345 और घात 3 हैं। पहले, 2345^3 की गणना करें यानी 12,895,213,625। अब, हम इन अंकों को जोड़ेंगे: 1 + 2 + 8 + 9 + 5 + 2 + 1 + 3 + 6 + 2 + 5 = 44। अब हम 4 + 4 = 8 जोड़ेंगे। चूंकि हमने एकल अंक प्राप्त कर लिया है, इसलिए आउटपुट 8 है।

इनपुट: int num = 3, int x = 3

आउटपुट: n^x में अंकों का पुनरावर्ती योग, जहां n और x बहुत बड़े हैं: 9

व्याख्या: हमें num और x के रूप में धनात्मक पूर्णांक मान दिए गए हैं जिनके मान 3 और घात 3 हैं। पहले, 3^3 की गणना करें यानी 9। चूंकि हमने एकल अंक प्राप्त कर लिया है, इसलिए आउटपुट 9 है और आगे किसी गणना की आवश्यकता नहीं है।

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण:

  • एक पूर्णांक वेरिएबल num और x इनपुट करें और डेटा को फंक्शन Recursive_Digit(num, x) में आगे की प्रोसेसिंग के लिए पास करें।
  • फंक्शन Recursive_Digit(num, x) के अंदर:
    • 'total' वेरिएबल को long के रूप में घोषित करें और इसे फंक्शन total_digits(num) को कॉल करके सेट करें जो पास किए गए नंबर के अंकों का योग लौटाएगा।
    • temp वेरिएबल को long प्रकार का घोषित करें और इसे power % 6 पर सेट करें।
    • जांचें यदि total = 3 या total = 6 और power > 1 तो 9 लौटाएं।
    • अन्यथा यदि, power = 1 तो total लौटाएं।
    • अन्यथा यदि, power = 0 तो 1 लौटाएं।
    • अन्यथा यदि, temp == 0 तो total_digits((long)pow(total, 6)) को कॉल करके लौटाएं।
    • अन्यथा, total_digits((long)pow(total, temp)) को लौटाएं।
  • फंक्शन long total_digits(long num) के अंदर:
    • जांचें यदि num = 0 तो 0 लौटाएं। जांचें यदि num % 9 = 0 तो 9 लौटाएं।
    • अन्यथा, num % 9 लौटाएं।

उदाहरण

#include <bits/stdc++.h>
using namespace std;

long total_digits(long num) {
    if(num == 0) {
        return 0;
    }
    if(num % 9 == 0) {
        return 9;
    } else {
        return num % 9;
    }
}

long Recursive_Digit(long num, long power) {
    long total = total_digits(num);
    long temp = power % 6;
    if((total == 3 || total == 6) && power > 1) {
        return 9;
    } else if (power == 1) {
        return total;
    } else if (power == 0) {
        return 1;
    } else if (temp == 0) {
        return total_digits((long)pow(total, 6));
    } else {
        return total_digits((long)pow(total, temp));
    }
}

int main() {
    int num = 2345;
    int x = 98754;
    cout << "Recursive sum of digit in n^x, where n and x are very large are: " << Recursive_Digit(num, x);
    return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा:

Recursive sum of digit in n^x, where n and x are very large are: 1
  1. - C++ में K संख्याएं ढूंढना जो 2 की घात हैं और जिनका योग N है

    मान लीजिए हमारे पास दो संख्याएं N और K हैं। कार्य K संख्याएं प्रिंट करना है जो 2 की घात (powers of 2) हैं और जिनका योग N है। यदि संभव नहीं है, तो -1 लौटाएं। उदाहरण: N=9, K=4 के लिए आउटपुट 4, 2, 2, 1 होगा (योग=9, तत्व=4, प्रत्येक 2 की घात)। हल करने के चरण यदि K, N में सेट बिट्स की संख्या से कम

  1. - C++ में योग और GCD दिए जाने पर दो संख्याएं ढूंढना

    हमारे पास दो संख्याओं a और b का योग और GCD है। हमें दोनों संख्याएं a और b ढूंढनी हैं। यदि यह संभव नहीं है, तो -1 लौटाएं। मान लीजिए योग 6 है और GCD 2 है, तो संख्याएं 4 और 2 हैं।दृष्टिकोण ऐसा है, चूंकि GCD दिया गया है, तो यह ज्ञात है कि संख्याएं इसके गुणक होंगी। अब निम्न चरण हैंयदि हम पहली संख्या को G

  1. - C++ में कॉपी एलिज़न और रिटर्न वैल्यू ऑप्टिमाइज़ेशन क्या हैं?

    कॉपी एलिज़न को कॉपी ओमिशन के रूप में भी जाना जाता है। यह कंपाइलर ऑप्टिमाइज़ेशन तकनीकों में से एक है। यह ऑब्जेक्ट्स की अनावश्यक कॉपी को रोकता है। लगभग सभी वर्तमान कंपाइलर इस कॉपी एलिज़न तकनीक का उपयोग करते हैं। आइए एक उदाहरण कोड की सहायता से देखें कि यह कैसे काम करता है। उदाहरण कोड #include <iost