[C++] 手動打印一個N字節的整數


Answers

輸出十進制數的基本遞歸算法:

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;
}

我現在還沒有定義幫助函數,也許這就夠了。

Question

什麼是一個可伸縮的算法來手動打印一個N位二進制數字整數其值不適合long long 。 我知道printf和朋友,以及<iostream> (它最有可能在<cstdio>上捎帶有標準類型的這個內置的,但是我想要做一個由N個字節組成的整數。

我已經想到了這一點,並蒐索了一下,但總是歸結為使用像GMP(我不熟悉的代碼庫)或“使用printf”或最有用的“這是困難的”之前存在bigint libirary。 。

整數基本上是:

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

所以重新解釋一個Integer<4>的字節會給你一個int32_t 。 我想把這個縮放到N> 8。 效率目前並不是我所關心的。 也不是endianness(這是x86)。