bool operator<(const Num &a, const Num &b) { if (a.size() != b.size()) { return a.size() < b.size(); } else { return a.repr < b.repr; } }
int main(){ Num a = 10 ; Num b = 20 ; Num c = a + b ; c.print() ; }
Num operator+(const Num& n) const { Num ret; ret.b = lcm(n.b, b); ret.a = (ret.b/b*a) + (ret.b/n.b*n.a); ret.func(); return ret; }
Num operator*(const Num& n) const { Num ret; ret.b = n.b*b; ret.a = n.a*a; ret.func(); return ret; }
Ex pow(const Ex & e, const Num & n) { if (n.isInt()) { return pow(e, n.get_uint()); } else { return pow(e, n); } }
namespace thread { class Num { public: Num() : m_num(0) {} void Incr() { m_lock.Lock(); ++m_num; m_lock.Unlock(); } int GetNum() { return m_num; } private: int m_num; CLock m_lock; }; static Num num; class IncrThread : public CThread { public: virtual void OnThreadRun() { for (int i = 0; i < 1000; ++i) { num.Incr(); } } }; }
int main( void ) { freopen("aplusb.in", "rt", stdin); freopen("aplusb.out", "wt", stdout); a.Read(); b.Read(); long double c = a.get() + b.get(); // a.Out(); // fprintf(stderr, "%lf", (double)b.get()); // b.Out(); res = a + b; res.Out(); // fprintf(stderr, "%.9lf == %.9lf\n", (double)c, (double)res.get()); /* a.Out(); b.Out();*/ return 0; }
const Num operator+(const Num &a, const Num &b) { string res; int len = max(a.size(), b.size()); string x = a.repr; string y = b.repr; reverse(x.begin(), x.end()); reverse(y.begin(), y.end()); x += string(len-x.size(), '0'); y += string(len-y.size(), '0'); int c = 0; for (int i=0; i<len; ++i) { int d = val[x[i]] + val[y[i]] + c; res += dig[d%36]; c = (d>=36); } if (c) { res += '1'; } reverse(res.begin(), res.end()); return Num(res); }
void absolute(var self) { Num* inum = type_class(type_of(self), Num); assert(inum->absolute); inum->absolute(self); }
const type_ptr Num::operator / (Num& right) const { type_ptr res = new Num( value() / right.value() ); return res; }
void divide(var lhs, var rhs) { Num* inum = type_class(type_of(lhs), Num); assert(inum->div); inum->div(lhs, rhs); }
void negate(var self) { Num* inum = type_class(type_of(self), Num); assert(inum->negate); inum->negate(self); }
void mul(var lhs, var rhs) { Num* inum = type_class(type_of(lhs), Num); assert(inum->mul); inum->mul(lhs, rhs); }
void sub(var lhs, var rhs) { Num* inum = type_class(type_of(lhs), Num); assert(inum->sub); inum->sub(lhs, rhs); }
void print(std::vector<char> &c){ num.print(c); c.back() = '/'; den.print(c); }
int main() { Num<int> left = -1; Num<int> right = 1; Num<int> result = left + right; return result.get(); }
virtual void OnThreadRun() { for (int i = 0; i < 1000; ++i) { num.Incr(); } }
void add(var lhs, var rhs) { Num* inum = type_class(type_of(lhs), Num); assert(inum->add); inum->add(lhs, rhs); }
double to_double() const { return num.to_double() / den.to_double(); }