我们知道,计算机,每一种编程语言,都有自己表示数的方法。受制于表示形式、长度,机器的计算是不精确的、有限制的。虽然平常应用够了,但与人类的方式还是不同。
C语言有大数库。GMP等等,应当是很强大的。但是还是不自然吧。
C++的方法,运算符重定义等等,才可以写出更自然的?
在形式上,思维上更符合人类行为的 大数库,是否已经有了?请告诉我!
不在底层求效率,思维上更接近人类的。
有想法的写一写?
以下,先把数表示出来?
#ifndef NUMBER_H
#define NUMBER_H
#include <concepts>
#include <string>
#include <iostream>
#include<regex>
bool can_convert_to_Number(std::string str);
template<typename T>
concept can_to_number = requires(T t){
{ std::to_string(t) } -> std::same_as<std::string>;
can_convert_to_Number(std::to_string(t)) == true;
};
class Number
{
private:
std::string _value;
public:
Number():_value("0"){};
Number(can_to_number auto a):_value(std::to_string(a)){};
Number(std::string a){
if(can_convert_to_Number(a))
_value=a;
else
throw "Must can convert to Number.";
};
~Number();
void print(){std::cout << _value <<std::endl;}
std::string value(){return _value;}
//bool isZero();
protected:
};
#endif
#include "Number.h"
Number::~Number()
{
}
bool can_convert_to_Number(std::string str)
{
std::regex r("(^[+-]?)((0$)|([1-9][0-9]*[.][0-9]+$)|(0[.][0-9]+$)|([1-9][0-9]*$))");
bool flag = std::regex_match(str, r);
return flag;
}