Logo huzhenyuan的博客

博客

又来(??).hpp?!

2025-07-25 22:01:36 By huzhenyuan

没错,新的.hpp又来了……

(不是哥们,又干啥了?)

点我看Tree~~.hpp: 关于我自己写的Tree.hpp

String_number.hpp

顾名思义,把number(就是int, long long一类的)string保存。

why要写这个看起来就(没)(啥)(用)的.hpp呢?

什么???你不知道???

高精度啊!!bro!!~

You:那高精度又有……

拱出去,谢谢awa~

下面是代码时间~:

#include <string>
#include <unordered_map>
#include <bits/c++config.h>
#include <ostream>
#include <istream>
#include <algorithm>
namespace std
{
    class string_number
    {
    private:
        string num;
        unordered_map<char, int> digit_map;

    public:

#define digit_map_init {{'0', 0}, {'1', 1}, {'2', 2}, {'3', 3}, {'4', 4}, {'5', 5}, {'6', 6}, {'7', 7}, {'8', 8}, {'9', 9}}

        string_number(int num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(unsigned num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(long num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(unsigned long num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(long long num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(unsigned long long num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(float num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(double num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(long double num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(to_string(num)), digit_map(digit_map) {}
        string_number(char num,
                      unordered_map<char, int> digit_map = digit_map_init) : num(string(1, num)), digit_map(digit_map) {}
        string_number(string num = "",
                      unordered_map<char, int> digit_map = digit_map_init) : num(num), digit_map(digit_map) {}
        string_number(size_t n, char c,
                      unordered_map<char, int> digit_map = digit_map_init) : num(string(n, c)), digit_map(digit_map) {}

#undef digit_map_init

        string_number operator=(string_number str_n)
        {
            this->num = str_n.num;
            return *this;
        }
        friend string_number operator+(string_number str_n1, string_number str_n2);
        string_number operator+=(string_number str_n)
        {
            *this = *this + str_n;
            return *this;
        }

        friend ostream &operator<<(ostream &output, string_number str_n);
        friend istream &operator>>(istream &input, string_number &str_n);
    };

    string_number operator+(string_number str_n1, string_number str_n2)
    {
        size_t len1 = str_n1.num.size(), len2 = str_n2.num.size();
        if (len1 > len2)
        {
            swap(str_n1, str_n2);
            swap(len1, len2);
        }
        bool carry = false;
        size_t i = len2 - 1;
        for (; i >= len2 - len1; i--)
        {
            str_n2.num.at(i) += str_n1.num.at(i - len2 + len1) - '0' + carry;
            carry = str_n2.num.at(i) - '0' > 9;
            str_n2.num.at(i) -= carry * 10;
            if (i == 0)
                break;
        }
        while (carry && !(len2 - len1 == 0))
        {
            str_n2.num.at(i)++;
            carry = str_n2.num.at(i) - '0' > 9;
            str_n2.num.at(i) -= carry * 10;
            if (i-- == 0)
                break;
        }
        if (carry)
            str_n2.num = '1' + str_n2.num;
        return str_n2;
    }

    ostream &operator<<(ostream &output, string_number str_n)
    {
        output << str_n.num;
        return output;
    }
    istream &operator>>(istream &input, string_number &str_n)
    {
        input >> str_n.num;
        return input;
    }
}

(悄悄地告诉你:这个加法好出生啊QWQ,写了我半个小时awa~~)

如你所见,只有加法。剩下的还要等等。(毕竟还在写Tree.hpp)

其实是不想写……

.

.

.

.

.

看啥?没了。

.

.

.

.

.

真没了。

.

.

.

.

.

真没了啊!!

.

.

.

.

.

.

.

.

.

.

谁让你看了?都说没了

.

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。