Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <string>
- #include <iostream>
- #include "assignment4.h"
- using std::cout;
- using std::vector;
- using std::string;
- using std::endl;
- int IntUnlimited::size() {return BFN.size();}
- char IntUnlimited::at(int index) {return BFN.at(index);}
- void IntUnlimited::push_back(char num) {return BFN.push_back(num);}
- IntUnlimited IntUnlimited::negate() {
- if(this->BFN.at(0) == '-') {
- this->BFN.erase(0,1);
- }
- else {
- this->BFN.insert(0, "-");
- }
- return *this;
- }
- IntUnlimited::IntUnlimited (const char* str) {
- string input = str;
- for(int i = 0; i < input.size(); ++i) {
- this->BFN.push_back(input.at(i));
- }
- }
- IntUnlimited::IntUnlimited (int num) {
- string str = To_String(num);
- for(int i = 0; i < str.size(); ++i) {
- this->BFN.push_back(str.at(i));
- }
- }
- IntUnlimited::IntUnlimited (const IntUnlimited &num) {
- BFN = num.BFN;
- }
- IntUnlimited::IntUnlimited(){
- }
- IntUnlimited operator+(IntUnlimited num1, IntUnlimited num2) {
- IntUnlimited output, i1, i2;
- if(num1.at(0) == '-' || num2.at(0) == '-') {
- if(num1.at(0) == '-' && num2.at(0) == '-') {
- return (num1.negate()+num2.negate()).negate();
- }
- else if(num1.at(0) == '-' && num2.at(0) != '-') {
- return (num1.negate() - num2).negate();
- }
- else {
- return (num2.negate() - num1).negate();
- }
- }
- if(num1.size() < num2.size() || ((num1.size() == num2.size())
- && (num1.at(0) < num2.at(0)))){
- i1 = num1;
- i2 = num2;
- }
- else{
- i1 = num2;
- i2 = num1;
- }
- int extra = 0;
- for(int x = 0; x < num2.size(); ++x){
- int numOut = (int)i1.at(i1.size()-1-x) + (int)i2.at(i2.size()-1-x) + extra;
- output.push_back((char)(numOut % 10));
- extra = numOut / 10;
- for(int x = num2.size(); x < num1.size(); ++x) {
- output.push_back((char)num1.at(x));
- }
- }
- return output;
- }
- IntUnlimited operator+(IntUnlimited num1, int num2) {
- IntUnlimited newNum2 = num2;
- return (num1+newNum2);
- }
- IntUnlimited operator-(IntUnlimited num1, IntUnlimited num2) {
- IntUnlimited output;
- if(num1.at(0) == '-' || num2.at(0) == '-') {
- if(num1.at(0) == '-' && num2.at(0) == '-'){
- return((num1.negate() - num2.negate()).negate());
- }
- else if(num1.at(0) == '-' && num2.at(0) != '-') {
- return(num1.negate()+num2).negate();
- }
- else if(num1.at(0) != '-' && num2.at(0) == '-') {
- return(num1 + num2.negate());
- }
- }
- if(num1.size() < num2.size() || ((num1.size() == num2.size())
- && (num1.at(0) < num2.at(0)))) {
- return ((num2-num1).negate());
- }
- int extra = 0;
- for(int i = 0; i < num2.size(); ++i) {
- int numOut = (int)num1.at(num1.size() - 1 - i) - (int)num2.at(num2.size() - 1 -i) - extra;
- if(numOut < 0) {
- output.push_back((char)(numOut*(-1)));
- extra = 1;
- }
- else {
- output.push_back((char)numOut);
- }
- }
- return output;
- }
- IntUnlimited operator-(IntUnlimited num1, int num2) {
- IntUnlimited newNum2 = num2;
- return (num1 - newNum2);
- }
- IntUnlimited operator*(IntUnlimited num1, IntUnlimited num2) {
- IntUnlimited output;
- long long int size1 = num1.size();
- long long int size2 = num2.size();
- if(num1.at(0) =='0' || num2.at(0) == '0') {
- return "0";
- }
- if(size1 < size2) {
- return num2*num1;
- }
- bool negAns = false;
- if(num1.at(0) == '-' && num2.at(0) == '-'){
- num1.negate();
- num2.negate();
- }
- else if(num1.at(0) == '-' && num2.at(0) != '-'){
- num1.negate();
- negAns = true;
- }
- else if(num1.at(0) != '-' && num2.at(0) == '-'){
- num2.negate();
- negAns = true;
- }
- int num1Index = 0;
- for (int i = size1-1; i >= 0; i--) {
- int extra = 0;
- int a = (int)num1.at(i);
- int num2Index = 0;
- for (int j = size2-1; j >= 0; j--) {
- int b = (int)num2.at(j);
- int numOut = a*b + extra;
- output.push_back((char)(numOut % 10));
- extra = numOut/10;
- num2Index++;
- }
- num1Index++;
- }
- if (negAns) {output.negate();}
- return output;
- }
- IntUnlimited operator*(IntUnlimited num1, int num2) {
- IntUnlimited newNum2 = num2;
- return num1 * newNum2;
- }
- IntUnlimited operator/(IntUnlimited num1, IntUnlimited num2) {
- IntUnlimited output;
- if(num2.at(0) == '0') {return "NaN";}
- if(num1.size() < num2.size()) {return "0";}
- bool negAns = false;
- if(num1.at(0) == '-' && num2.at(0) == '-'){
- num1.negate();
- num2.negate();
- }
- else if(num1.at(0) == '-' && num2.at(0) != '-'){
- num1.negate();
- negAns = true;
- }
- else if(num1.at(0) != '-' && num2.at(0) == '-'){
- num2.negate();
- negAns = true;
- }
- int i = 0;
- int curNum = num1.at(0);
- IntUnlimited n1 = num1;
- IntUnlimited n2 = num2;
- long long int quotient = 0;
- while(n1.at(0) != '0' || n1.at(0) != '-'){
- n1 = n1 - n2;
- quotient++;
- }
- output = quotient;
- if (negAns) {output.negate();}
- return output;
- }
- IntUnlimited operator/(IntUnlimited num1, int num2) {
- IntUnlimited newNum2 = num2;
- return num1 / num2;
- }
- string IntUnlimited::To_String(int num){
- string output;
- if(num < 0) {
- output.push_back('-');
- num = num * (-1);
- }
- if(num == 0) {
- output.push_back(0);
- }
- else{
- while(num != 0) {
- char lstDigit = (char)(num % 10);
- num = num / 10;
- output.push_back(lstDigit);
- }
- }
- return output;
- }
- int IntUnlimited::To_Int(string str){
- int output = 0;
- for(int i = 0; i < str.size(); ++i) {
- output = output*10 + str.at(i);
- }
- return output;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement