没错,新的.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)
其实是不想写……
.
.
.
.
.
看啥?没了。
.
.
.
.
.
真没了。
.
.
.
.
.
真没了啊!!
.
.
.
.
.
.
.
.
.
.
谁让你看了?都说没了
.