typedef unsigned char byte;
typedef std::vector<byte> vb;
vb data;
bool flag; //false->正数 true->负数
static vb unsigned_add(const vb& l, const vb& r)
{
vb res;
const size_t size = std::max(l.size(), r.size());
byte li, ri;
bool jw = false;
for (size_t i = 0; i < size; i++)
{
if (i < l.size()) li = l[i];
else li = 0;
if (i < r.size()) ri = r[i];
else ri = 0;
res.push_back((li + ri + jw) % 10);
jw = (li + ri) >= 10;
}
if (jw) res.push_back(1);
return res;
}
static vb unsigned_substract(const vb& l, const vb& r) //l>=r
{
vb res;
bool tw = false;
byte ri;
char t;
for (size_t i = 0; i < l.size(); i++)
{
if (i < r.size()) ri = r[i];
else ri = 0;
t = l[i] - ri - tw;
if (t < 0)
{
tw = true;
t += 10;
}
res.push_back(t);
}
}
static vb unsigned_multiply(const vb& l, const vb& r)
{
}
static vb unsigned_divide(const vb& l, const vb& r)
{
}
要求:补全unsigned_multiply和unsigned_divide函数,unsigned_multiply请用FFT,unsigned_divide函数时间复杂度尽可能低,空间复杂度不要高得太离谱。
vb类型其实就是std::vector<unsigned char>,第0项(索引为0)是个位,第1项是十位……
如果我的高精度加减法写的有问题,欢迎大佬指正