Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- using namespace std;
- const int base = 11;
- class Integer {
- public:
- Integer() {}
- Integer(string str){
- int st = 0;
- sign = 1;
- if(str[0] == '-'){
- st = 1;
- sign = -1;
- }
- for(int i = str.size() - 1; i >= st; --i){
- digits.push_back(str[i] == 'a' ? 10 : str[i] - '0');
- }
- }
- friend Integer operator + (Integer a , Integer b){
- if(a.sign == 1 && b.sign == -1){
- return a - b.abs();
- }
- if(a.sign == -1 && b.sign == 1){
- return b - a.abs();
- }
- if(a.sign == -1 && b.sign == -1){
- Integer c = a.abs() + b.abs();
- return c.negate();
- }
- if(a.size() < b.size()){
- return b + a;
- }
- Integer c;
- int add = 0;
- int len = b.size();
- for(int i = 0; i < len; ++i){
- c.digits.push_back((a.digits[i] + b.digits[i] + add) % base);
- add = (a.digits[i] + b.digits[i] + add) / base;
- }
- for(int i = len; i < a.size(); ++i){
- c.digits.push_back((a.digits[i] + add) % base);
- add = (a.digits[i] + add) / base;
- }
- if(add){
- c.digits.push_back(add);
- }
- return c;
- }
- friend Integer operator - (Integer a , Integer b){
- if (a.sign != b.sign) {
- Integer c = a.abs() + b.abs();
- if (a.sign == -1) {
- c.sign *= -1;
- }
- return c;
- }
- if (a.sign == -1) {
- Integer c = a.negate() - b.negate();
- c.sign *= -1;
- return c;
- }
- if (less(a, b)) {
- Integer c = b - a;
- c.sign = -1;
- return c;
- }
- //a >= b
- int len = max(a.size(), b.size());
- Integer c;
- c.digits.resize(len);
- for(int i = 0; i < len; ++i) {
- c.digits[i] = a.digits[i] - (i < b.size() ? b.digits[i] : 0);
- if (c.digits[i] < 0) {
- c.digits[i] += base;
- a.digits[i + 1]--;
- }
- }
- while(c.size() > 1 && c.digits.back() == 0) {
- c.digits.pop_back();
- }
- return c;
- }
- friend istream& operator >> (istream &is, Integer &a) {
- string str;
- is >> str;
- a = Integer(str);
- return is;
- }
- friend ostream& operator << (ostream &os, Integer a) {
- if (a.sign == -1) {
- os << '-';
- }
- for(int i = a.size() - 1; i >= 0; --i) {
- if (a.digits[i] == 10) {
- os << 'A';
- } else {
- os << a.digits[i];
- }
- }
- return os;
- }
- private:
- static bool less(Integer a, Integer b) {
- //returns true if a < b (a >= 0 && b >= 0)
- if (a.size() < b.size()) {
- return true;
- }
- if (a.size() > b.size()) {
- return false;
- }
- for (int i = 0; i < a.size(); ++i) {
- if (a.digits[i] != b.digits[i]) {
- return a.digits[i] < b.digits[i];
- }
- }
- return false;
- }
- Integer abs(){
- Integer cur = *this;
- cur.sign = 1;
- return cur;
- }
- Integer negate() {
- Integer cur = *this;
- cur.sign *= -1;
- return cur;
- }
- int size() {
- return digits.size();
- }
- int sign;
- vector < int > digits;
- };
- int main() {
- freopen("in.rtf" , "r" , stdin);
- freopen("out.rtf" , "w" , stdout);
- Integer x, y;
- cin >> x >> y;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement