#include #include #include #include #include #include #include #include using namespace std; #define unit 3 #define carry 10 #define cunit 1000 #define eps 0.00001 typedef unsigned int uint; typedef vector vuint; const long double PI = 3.1415926535897932384626433832795L; string del(string);//除去字符串前位多余负号和0 vuint del(vuint);//除去向量前位多余0 string itos(uint);//整数转字符串 string vtos(vuint);//向量转字符串 //string vtobit(vuint);//向量转比特流 uint vless(vuint, vuint);//前者是否小于后者 vuint vmul(vuint, uint, uint);//向量与整数乘法 vuint vdif(vuint, vuint);//向量做差 void FFT(vector< complex > &, uint); void IFFT(vector< complex > &, uint); /* class */ class lint { public: lint(); lint(string); ~lint(); string getd();//获得十进制无符号整数 vuint getvec();//获得整数向量 vuint getbit();//获得二进制向量 uint operator [](uint);//获得整数向量中的元素 uint getlen();//获得向量长度 uint getlength();//获得无符号整数长度 int getsign();//获得符号 int compare(lint);//比较无符号整数大小 int operator ==(lint);//比较有符号整数大小 /*以下返回的都是有符号整数*/ void operator =(string); string operator +(lint); string operator *(lint); string operator -(lint); string operator /(lint); string operator ^(lint); /*以下返回无符号整数*/ string operator %(lint); private: uint len;//向量长度 uint length;//数字部分长度 vuint num;//整数组向量 int sign;//符号 }; string gcd(lint, lint);//求两数最大公约数