70 lines
1.7 KiB
C++
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);//求两数最大公约数
|