c++ - मैन्युअल रूप से एक एन-बाइट पूर्णांक छपाई




printing integer (2)

एक दशमलव संख्या को आउटपुट करने के लिए मूल पुनरावर्ती अल्गोरिदम:

void negate(Integer & number); // modifies the input
int divide_by_10(Integer & number); // modifies the input
bool is_zero(const Integer & number);

void output_number(Integer number)
{
    if (number.first < 0)
    {
        cout << "-";
        negate(number);
    }
    if (is_zero(number))
    {
        cout << "0";
        return;
    }
    int remainder = divide_by_10(number);
    if (!is_zero(number))
        output_number(number);
    char digit[] = {'0', 0};
    digit[0] += remainder;
    cout << digit;
}

मैंने सहायक कार्यों को अब तक अनिर्धारित कर दिया है, शायद यह पर्याप्त है

एन-बाइनरी-डिजिट पूर्णांक को मैन्युअल रूप से मुद्रित करने के लिए स्केलेबल एल्गोरिथ्म क्या होता है जिसका मान long long फिट नहीं है मुझे <iostream> (जो कि <cstdio> पर सबसे अधिक संभावना वाले सूअर का बच्चा पीठों के मानक प्रकार के लिए निर्मित है) के साथ printf और दोस्तों को पता है, लेकिन मैं इसे एन बाइट्स से बना एक पूर्णांक के लिए करना चाहता हूं।

मैंने इस बारे में सोचा है और थोड़ा सा गल गया है, लेकिन यह पहले से ही एक पूर्व-मौजूदा बिगंट लिबरीरी का उपयोग करने के लिए नीचे आता है जैसे जीएमपी (एक कोडबेस जिसे मैं परिचित नहीं हूं) या "प्रिंटफ़ का उपयोग करें" या सबसे उपयोगी "यह मुश्किल है" ।

पूर्णांक मूल रूप से है:

template<size_t N>
class Integer{
...
private:
    int8_t first;
    uint8_t rest[N-1];
}

इसलिए एक Integer<4> के बाइट को पुन: व्याख्या करना आपको एक int32_t मिलेगा मैं इसे N> 8 में स्केल करना चाहता हूँ इस समय वास्तव में दक्षता मेरी चिंता नहीं है अंत में कोई भी नहीं है (यह x 86 के लिए है)


चरण 1: स्ट्रिंग फ़ॉर्मेट में दो की शक्तियों वाली लुकअप तालिका परिभाषित करें:

const char * const powers_of_two[] = {"1", "2", "4", "8", "16", "32", "64", ...};

चरण 2: फ़ंक्शन लिखें जो स्ट्रिंग फ़ॉर्मेट में दो नंबर जोड़ता है।

चरण 3: अपने नंबर में बिट्स के माध्यम से दोहराएं और 1 बिट के अनुरूप सभी तार जोड़ दें।

चरण 4: परिणाम प्रिंट करें

मैंने इस दृष्टिकोण को बहुत बड़ी फ़्लोटिंग प्वाइंट नंबर प्रिंट करने के लिए खुद का इस्तेमाल किया और यह मेरे लिए ठीक काम किया





arbitrary-precision