1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #ifndef FIXED_HPP_ #define FIXED_HPP_ typedef float value_type ; class fixed { public: fixed(); fixed(value_type integer, value_type fraction); fixed(double val); void as_string(); value_type integer(); value_type fraction(); value_type value() const; //~fixed(); fixed& operator+=(const fixed &other); static const int places=4; static const int places10=10000; private: value_type integer_; value_type fraction_; value_type value_; }; fixed operator+(fixed a, const fixed &b); #endif #include <iostream> #include <ostream> #include <stdexcept> #include <string> #include <algorithm> // using namespace std; fixed::fixed():integer_(0), fraction_(0), value_(0){} fixed::fixed(value_type integer, value_type fraction):integer_(integer), fraction_(fraction) {try { if (fraction_ <0) throw std::invalid_argument("Invalid argument. Must be positive."); } catch (std::exception& e) { std::cout <<"\n"<< e.what() << std::endl; } while (fraction_>= places10) { if(int(fraction_)%10 >=5 && fraction_< (places10*10) ) fraction_=int(fraction_/10+1); else fraction_ =int(fraction_/10); } value_ = integer_*places10 + fraction_; } fixed::fixed(double val):integer_(int (val)), fraction_( (val- int(val))*places10) { if (val <0) { val = val*(-1); if ( int(val*places10*10)%10>=5) fraction_ = (fraction_*(-1) +1)*(-1); } else { if (int(val*places10*10)%10>=5) fraction_ = fraction_ +1; } value_ = integer_*places10 + fraction_; } void fixed::as_string() { std::string str; std::string str2; while( (int(integer_)/10) >=0 and int(integer_)>0 ) { str.push_back(int(integer_)%10 + 48); integer_ = integer_/10; //std::cout<<str<<std::endl; } //std::cout<<"String format: "<<str<<std::endl; reverse(str.begin(), str.end()); //std::cout<<"Reversed format: "<<str<<std::endl; str.push_back('.'); //std::cout<<"New std::string: "<<str<<std::endl; while( (int(fraction_)/10 )>=0 and int(fraction_)>0) { str2.push_back(int(fraction_)%10 + 48); fraction_ = fraction_/10; //std::cout<<str<<std::endl; } //std::cout<<"String format: "<<str<<std::endl; reverse(str2.begin(), str2.end()); str.append(str2); std::cout<<"String representation: "<<str<<std::endl; } value_type fixed::value() const { return value_; } value_type fixed::integer() { return integer_; } value_type fixed::fraction() { return fraction_; } fixed& fixed::operator+=(const fixed &other) { value_ += other.value(); return *this; } fixed operator+(fixed a, const fixed &b) // temporary fix { a+=b; return a;} int main() {} |
ICAgICNpZm5kZWYgRklYRURfSFBQXwogICAgI2RlZmluZSBGSVhFRF9IUFBfCiAKICAgIHR5cGVkZWYgZmxvYXQgdmFsdWVfdHlwZSA7ICAgCiAKICAgIGNsYXNzIGZpeGVkCiAgICB7ICAgCiAgICAgcHVibGljOgogICAgICAgZml4ZWQoKTsKICAgICAgIGZpeGVkKHZhbHVlX3R5cGUgaW50ZWdlciwgdmFsdWVfdHlwZSBmcmFjdGlvbik7IAogICAgICAgZml4ZWQoZG91YmxlIHZhbCk7CiAgICAgICB2b2lkIGFzX3N0cmluZygpOwogICAgICAgdmFsdWVfdHlwZSBpbnRlZ2VyKCk7CiAgICAgICB2YWx1ZV90eXBlIGZyYWN0aW9uKCk7CiAgICAgICB2YWx1ZV90eXBlIHZhbHVlKCkgY29uc3Q7CiAgICAgICAvL35maXhlZCgpOwogICAgICAgZml4ZWQmIG9wZXJhdG9yKz0oY29uc3QgZml4ZWQgJm90aGVyKTsKIAogICAgICAgc3RhdGljIGNvbnN0IGludCBwbGFjZXM9NDsgICAKICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGxhY2VzMTA9MTAwMDA7ICAKIAogICAgIHByaXZhdGU6CiAgICAgICB2YWx1ZV90eXBlIGludGVnZXJfOwogICAgICAgdmFsdWVfdHlwZSBmcmFjdGlvbl87ICAgCiAgICAgICB2YWx1ZV90eXBlIHZhbHVlXzsKICAgIH07ICAKIAogICAgZml4ZWQgb3BlcmF0b3IrKGZpeGVkIGEsIGNvbnN0IGZpeGVkICZiKTsKIAogICAgI2VuZGlmCiAKICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxvc3RyZWFtPgogICAgI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KICAgICNpbmNsdWRlIDxzdHJpbmc+CiAgICAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiAKICAgIC8vIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKICAgIGZpeGVkOjpmaXhlZCgpOmludGVnZXJfKDApLCBmcmFjdGlvbl8oMCksIHZhbHVlXygwKXt9CiAKCiAgICBmaXhlZDo6Zml4ZWQodmFsdWVfdHlwZSBpbnRlZ2VyLCAgdmFsdWVfdHlwZSAgICAgICAgICAgICAgICAgZnJhY3Rpb24pOmludGVnZXJfKGludGVnZXIpLCAgICAgICAgIGZyYWN0aW9uXyhmcmFjdGlvbikKICAgICAgICAgICB7dHJ5CiAgICAgICB7ICAgCiAgICAgICAgaWYgKGZyYWN0aW9uXyA8MCkgICAgCiAgICAgICAgICAgdGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50KCJJbnZhbGlkIGFyZ3VtZW50LiBNdXN0IGJlIHBvc2l0aXZlLiIpOwogICAgICAgfSAgIAogICAgICAgICAgICBjYXRjaCAoc3RkOjpleGNlcHRpb24mIGUpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IlxuIjw8IGUud2hhdCgpIDw8IHN0ZDo6ZW5kbDsKICAgICAgfQogICAgICAgICAgICAgd2hpbGUgKGZyYWN0aW9uXz49IHBsYWNlczEwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmKGludChmcmFjdGlvbl8pJTEwID49NSAmJiBmcmFjdGlvbl88IChwbGFjZXMxMCoxMCkgKQogICAgICAgICAgICBmcmFjdGlvbl89aW50KGZyYWN0aW9uXy8xMCsxKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICBmcmFjdGlvbl8gPWludChmcmFjdGlvbl8vMTApOwogICAgICAgIH0KCiAgICAgdmFsdWVfID0gaW50ZWdlcl8qcGxhY2VzMTAgKyBmcmFjdGlvbl87CiAgICAgICAgICAgfQoKICAgIGZpeGVkOjpmaXhlZChkb3VibGUgdmFsKTppbnRlZ2VyXyhpbnQgKHZhbCkpLCBmcmFjdGlvbl8oICh2YWwtIGludCh2YWwpKSpwbGFjZXMxMCkKICAgICAgICAgICB7IGlmICh2YWwgPDApCiAgICAgICAgICAgICAgICB7ICAgIHZhbCA9IHZhbCooLTEpOwogICAgICAgICAgICAgaWYgKCBpbnQodmFsKnBsYWNlczEwKjEwKSUxMD49NSkKICAgICAgICAgICAgICBmcmFjdGlvbl8gPSAoZnJhY3Rpb25fKigtMSkgKzEpKigtMSk7CiAgICAgICAgfQogICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgaWYgKGludCh2YWwqcGxhY2VzMTAqMTApJTEwPj01KQogICAgICAgICAgICAgIGZyYWN0aW9uXyA9IGZyYWN0aW9uXyArMTsKICAgICAgICAgfQoKICAgICB2YWx1ZV8gPSBpbnRlZ2VyXypwbGFjZXMxMCArIGZyYWN0aW9uXzsKICAgICAgICAgICB9CgogICAgdm9pZCBmaXhlZDo6YXNfc3RyaW5nKCkKICAgICAgICAgICB7ICAgIHN0ZDo6c3RyaW5nIHN0cjsKICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cjI7CiAgICAgICAgd2hpbGUoIChpbnQoaW50ZWdlcl8pLzEwKSA+PTAgYW5kIGludChpbnRlZ2VyXyk+MCApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBzdHIucHVzaF9iYWNrKGludChpbnRlZ2VyXyklMTAgKyA0OCk7CiAgICAgICAgICAgICBpbnRlZ2VyXyA9IGludGVnZXJfLzEwOwogICAgICAgICAgICAgLy9zdGQ6OmNvdXQ8PHN0cjw8c3RkOjplbmRsOwogICAgICAgICAgICAgfQogICAgICAgIC8vc3RkOjpjb3V0PDwiU3RyaW5nIGZvcm1hdDogIjw8c3RyPDxzdGQ6OmVuZGw7CiAgICAgICAgcmV2ZXJzZShzdHIuYmVnaW4oKSwgc3RyLmVuZCgpKTsKICAgICAgICAvL3N0ZDo6Y291dDw8IlJldmVyc2VkIGZvcm1hdDogIjw8c3RyPDxzdGQ6OmVuZGw7CgogICAgICAgIHN0ci5wdXNoX2JhY2soJy4nKTsKICAgICAgICAvL3N0ZDo6Y291dDw8Ik5ldyBzdGQ6OnN0cmluZzogIjw8c3RyPDxzdGQ6OmVuZGw7CiAgICAgICAgd2hpbGUoIChpbnQoZnJhY3Rpb25fKS8xMCApPj0wIGFuZCBpbnQoZnJhY3Rpb25fKT4wKQogICAgICAgICAgICAgewogICAgICAgICAgICAgc3RyMi5wdXNoX2JhY2soaW50KGZyYWN0aW9uXyklMTAgKyA0OCk7CiAgICAgICAgICAgICBmcmFjdGlvbl8gPSBmcmFjdGlvbl8vMTA7CiAgICAgICAgICAgICAvL3N0ZDo6Y291dDw8c3RyPDxzdGQ6OmVuZGw7CiAgICAgICAgICAgICB9CiAgICAgICAgLy9zdGQ6OmNvdXQ8PCJTdHJpbmcgZm9ybWF0OiAiPDxzdHI8PHN0ZDo6ZW5kbDsKICAgICAgICByZXZlcnNlKHN0cjIuYmVnaW4oKSwgc3RyMi5lbmQoKSk7CiAgICAgICAgc3RyLmFwcGVuZChzdHIyKTsKICAgICAgICBzdGQ6OmNvdXQ8PCJTdHJpbmcgcmVwcmVzZW50YXRpb246ICI8PHN0cjw8c3RkOjplbmRsOwogICAgICAgICAgIH0KCiAgICB2YWx1ZV90eXBlIGZpeGVkOjp2YWx1ZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgIHJldHVybiAgIHZhbHVlXzsKICAgICAgICAgfQogICAgdmFsdWVfdHlwZSBmaXhlZDo6aW50ZWdlcigpCiAgICAgICAgIHsKICAgICAgICAgIHJldHVybiBpbnRlZ2VyXzsKICAgICAgICAgfQogICAgdmFsdWVfdHlwZSBmaXhlZDo6ZnJhY3Rpb24oKQogICAgICAgICAgICAgICAgewogICAgICAgICAgcmV0dXJuIGZyYWN0aW9uXzsKICAgICAgICAgfQogICAgZml4ZWQmIGZpeGVkOjpvcGVyYXRvcis9KGNvbnN0IGZpeGVkICZvdGhlcikKICAgICAgICAgICB7IHZhbHVlXyArPSBvdGhlci52YWx1ZSgpOwogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgIH0KCiAgICBmaXhlZCBvcGVyYXRvcisoZml4ZWQgYSwgY29uc3QgZml4ZWQgJmIpIC8vIHRlbXBvcmFyeSBmaXgKICAgICAgICAgIHsgYSs9YjsKICAgICAgICAgIHJldHVybiBhO30KCmludCBtYWluKCkge30K
-
upload with new input
-
result: Success time: 0.02s memory: 2724 kB returned value: 0


