Advertisement
Guest User

Untitled

a guest
Oct 12th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.25 KB | None | 0 0
  1. #include <vector>
  2. #include <string>
  3. #include <iostream>
  4. #include "assignment4.h"
  5. using std::cout;
  6. using std::vector;
  7. using std::string;
  8. using std::endl;
  9.  
  10. int IntUnlimited::size() {return BFN.size();}
  11. char IntUnlimited::at(int index) {return BFN.at(index);}
  12. void IntUnlimited::push_back(char num) {return BFN.push_back(num);}
  13. IntUnlimited IntUnlimited::negate() {
  14.         if(this->BFN.at(0) == '-') {
  15.             this->BFN.erase(0,1);
  16.         }
  17.         else {
  18.             this->BFN.insert(0, "-");
  19.         }
  20.         return *this;
  21.     }
  22.  
  23. IntUnlimited::IntUnlimited (const char* str) {
  24.     string input = str;
  25.     for(int i = 0; i < input.size(); ++i) {
  26.         this->BFN.push_back(input.at(i));
  27.     }
  28.  
  29. }
  30.  
  31. IntUnlimited::IntUnlimited (int num) {
  32.     string str = To_String(num);
  33.     for(int i = 0; i < str.size(); ++i) {
  34.         this->BFN.push_back(str.at(i));
  35.     }
  36. }
  37.  
  38. IntUnlimited::IntUnlimited (const IntUnlimited &num) {
  39.     BFN = num.BFN;
  40. }
  41. IntUnlimited::IntUnlimited(){
  42.  
  43. }
  44.  
  45. IntUnlimited operator+(IntUnlimited num1, IntUnlimited num2) {
  46.     IntUnlimited output, i1, i2;
  47.     if(num1.at(0) == '-' || num2.at(0) == '-') {
  48.         if(num1.at(0) == '-' && num2.at(0) == '-') {
  49.             return (num1.negate()+num2.negate()).negate();
  50.         }
  51.         else if(num1.at(0) == '-' && num2.at(0) != '-') {
  52.             return (num1.negate() - num2).negate();
  53.         }
  54.         else {
  55.             return (num2.negate() - num1).negate();
  56.         }
  57.     }
  58.     if(num1.size() < num2.size() || ((num1.size() == num2.size())
  59.        && (num1.at(0) < num2.at(0)))){
  60.         i1 = num1;
  61.         i2 = num2;
  62.     }
  63.     else{
  64.         i1 = num2;
  65.         i2 = num1;
  66.     }
  67.  
  68.     int extra = 0;
  69.     for(int x = 0; x < num2.size(); ++x){
  70.         int numOut = (int)i1.at(i1.size()-1-x) + (int)i2.at(i2.size()-1-x) + extra;
  71.         output.push_back((char)(numOut % 10));
  72.         extra = numOut / 10;
  73.     for(int x = num2.size(); x < num1.size(); ++x) {
  74.         output.push_back((char)num1.at(x));
  75.     }
  76.     }
  77.  
  78.     return output;
  79. }
  80. IntUnlimited operator+(IntUnlimited num1, int num2) {
  81.     IntUnlimited newNum2 = num2;
  82.     return (num1+newNum2); 
  83. }
  84. IntUnlimited operator-(IntUnlimited num1, IntUnlimited num2) {
  85.     IntUnlimited output;
  86.     if(num1.at(0) == '-' || num2.at(0) == '-') {
  87.         if(num1.at(0) == '-' && num2.at(0) == '-'){
  88.             return((num1.negate() - num2.negate()).negate());
  89.         }
  90.         else if(num1.at(0) == '-' && num2.at(0) != '-') {
  91.             return(num1.negate()+num2).negate();
  92.         }
  93.         else if(num1.at(0) != '-' && num2.at(0) == '-') {
  94.             return(num1 + num2.negate());
  95.         }
  96.  
  97.     }
  98.     if(num1.size() < num2.size() || ((num1.size() == num2.size())
  99.     && (num1.at(0) < num2.at(0)))) {
  100.         return ((num2-num1).negate());
  101.     }
  102.  
  103.     int extra = 0;
  104.     for(int i = 0; i < num2.size(); ++i) {
  105.         int numOut = (int)num1.at(num1.size() - 1 - i) - (int)num2.at(num2.size() - 1 -i) - extra;
  106.         if(numOut < 0) {
  107.             output.push_back((char)(numOut*(-1)));
  108.             extra = 1;
  109.         }
  110.         else {
  111.             output.push_back((char)numOut);
  112.         }
  113.  
  114.     }
  115.  
  116.     return output;
  117. }
  118. IntUnlimited operator-(IntUnlimited num1, int num2) {
  119.     IntUnlimited newNum2 = num2;   
  120.     return (num1 - newNum2);
  121. }
  122.  
  123. IntUnlimited operator*(IntUnlimited num1, IntUnlimited num2) {
  124.     IntUnlimited output;
  125.     long long int size1 = num1.size();
  126.     long long int size2 = num2.size();
  127.     if(num1.at(0) =='0' || num2.at(0) == '0') {
  128.         return "0";
  129.     }
  130.     if(size1 < size2) {
  131.         return num2*num1;
  132.     }
  133.     bool negAns = false;
  134.     if(num1.at(0) == '-' && num2.at(0) == '-'){
  135.         num1.negate();
  136.         num2.negate();
  137.     }
  138.     else if(num1.at(0) == '-' && num2.at(0) != '-'){
  139.         num1.negate();
  140.         negAns = true;
  141.     }
  142.     else if(num1.at(0) != '-' && num2.at(0) == '-'){
  143.         num2.negate();
  144.         negAns = true;
  145.     }
  146.     int num1Index = 0;
  147.     for (int i = size1-1; i >= 0; i--) {
  148.         int extra = 0;
  149.         int a = (int)num1.at(i);
  150.         int num2Index = 0;
  151.         for (int j = size2-1; j >= 0; j--) {
  152.             int b = (int)num2.at(j);
  153.             int numOut = a*b + extra;
  154.             output.push_back((char)(numOut % 10));
  155.             extra = numOut/10;
  156.             num2Index++;
  157.         }
  158.         num1Index++;
  159.     }
  160.     if (negAns) {output.negate();}
  161.     return output;
  162. }
  163.  
  164. IntUnlimited operator*(IntUnlimited num1, int num2) {
  165.     IntUnlimited newNum2 = num2;
  166.     return num1 * newNum2;
  167. }
  168.  
  169. IntUnlimited operator/(IntUnlimited num1, IntUnlimited num2) {
  170.     IntUnlimited output;
  171.     if(num2.at(0) == '0') {return "NaN";}
  172.     if(num1.size() < num2.size()) {return "0";}
  173.     bool negAns = false;
  174.     if(num1.at(0) == '-' && num2.at(0) == '-'){
  175.         num1.negate();
  176.         num2.negate();
  177.     }
  178.     else if(num1.at(0) == '-' && num2.at(0) != '-'){
  179.         num1.negate();
  180.         negAns = true;
  181.     }
  182.     else if(num1.at(0) != '-' && num2.at(0) == '-'){
  183.         num2.negate();
  184.         negAns = true;
  185.     }
  186.  
  187.     int i = 0;
  188.     int curNum = num1.at(0);
  189.     IntUnlimited n1 = num1;
  190.     IntUnlimited n2 = num2;
  191.     long long int quotient = 0;
  192.     while(n1.at(0) != '0' || n1.at(0) != '-'){
  193.         n1 = n1 - n2;
  194.         quotient++;
  195.     }
  196.     output = quotient;
  197.     if (negAns) {output.negate();}
  198.     return output;
  199. }
  200.  
  201. IntUnlimited operator/(IntUnlimited num1, int num2) {
  202.     IntUnlimited newNum2 = num2;
  203.  
  204.     return num1 / num2;
  205. }
  206.  
  207.  
  208. string IntUnlimited::To_String(int num){
  209.     string output;
  210.     if(num < 0) {
  211.         output.push_back('-');
  212.         num = num * (-1);
  213.     }
  214.     if(num == 0) {
  215.         output.push_back(0);
  216.     }
  217.     else{
  218.         while(num != 0) {
  219.             char lstDigit = (char)(num % 10);
  220.             num = num / 10;
  221.             output.push_back(lstDigit);
  222.         }
  223.     }
  224.     return output;
  225. }
  226.  
  227. int IntUnlimited::To_Int(string str){
  228.     int output = 0;
  229.     for(int i = 0; i < str.size(); ++i) {
  230.         output = output*10 + str.at(i);
  231.     }
  232.     return output;
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement