ProjectEuler/c++/lib/lint.hpp
2013-04-17 14:34:39 +08:00

70 lines
1.7 KiB
C++

#include <stdlib.h>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <string>
#include <vector>
using namespace std;
#define unit 3
#define carry 10
#define cunit 1000
#define eps 0.00001
typedef unsigned int uint;
typedef vector<uint> 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<long double> > &, uint);
void IFFT(vector< complex<long double> > &, 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);//求两数最大公约数