Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

The class largeIntegers is designed to process large integers of at most 100 dig

ID: 3736607 • Letter: T

Question

The class largeIntegers is designed to process large integers of at most 100 digits. Using dynamic arrays, redesign this class so that integers of any number of digits can be added or subtracted. Also overload the multiplication operator to multiply large integers.

largeIntegers.h

#pragma once

#include <string>

using namespace std;

class largeIntegers

{

public:

largeIntegers();

largeIntegers(const string& snumbers);

largeIntegers add(const largeIntegers& addend);

largeIntegers sub(const largeIntegers& subtrahend);

void print() const;

private:

static const size_t size = 16;

int numbers[size + 1];

};

largeIntegers.cpp

#include <iostream>

#include "largeIntegers.h"

using namespace std;

largeIntegers::largeIntegers()

{

for (size_t idx = 0; idx < size; ++idx)

numbers[idx] = 0;

}

largeIntegers::largeIntegers(const string& snumbers)

{

//size - 1 = sidx + nidx

for (size_t sidx = 0; sidx < snumbers.size(); sidx++)

{

size_t nidx = snumbers.size() - 1 - sidx;

numbers[nidx] = snumbers[sidx] - '0';

}

for (size_t nidx = snumbers.length(); nidx < size; ++nidx)

numbers[nidx] = 0;

}

largeIntegers largeIntegers::add(const largeIntegers& addend)

{

largeIntegers sum;

for (size_t idx = 0; idx < size; ++idx)

{

int littlesum = numbers[idx] + addend.numbers[idx];

sum.numbers[idx] = sum.numbers[idx] + littlesum % 10;

sum.numbers[idx + 1] = sum.numbers[idx + 1] + littlesum /

10;

}

return sum;

}

largeIntegers largeIntegers::sub(const largeIntegers& subtrahend)

{

largeIntegers difference;//sub works because difference is filled

with zeroes

for (size_t idx = 0; idx < size; ++idx)

{

difference.numbers[idx] = difference.numbers[idx] +

numbers[idx] - subtrahend.numbers[idx];

if (difference.numbers[idx] < 0)

{

difference.numbers[idx] =

difference.numbers[idx] + 10;

difference.numbers[idx + 1] = - 1;

}

}

return difference;

}

void largeIntegers::print() const

{

for(int idx = size - 1; idx >= 0; --idx)

cout << numbers[idx];

}

Explanation / Answer

#include <iostream> #include <string> #include <cstdlib> using namespace std; const int LIMIT=100; class largeIntegers { friend ostream& operator<<(ostream&, const largeIntegers&); public: largeIntegers(); void input(); void setInteger(); void setSize(int); int returnsize(); largeIntegers operator+ (const largeIntegers& otherInteger) const; largeIntegers operator- (const largeIntegers& otherInteger) const; private: string numword; int num[LIMIT]; int size; char digit[1]; }; ostream& operator<<(ostream& osObject, const largeIntegers& otherLarge) { bool temp=true; for(inti=(otherLarge.size-1);i>=0;i--) { if((otherLarge.num[i]==0)&&temp) { if(!(i==0)) osObject<<" "; else osObject<<otherLarge.num[i]; } else { osObject<<otherLarge.num[i]; temp=false; } } return osObject; } void outLine(int line) { for(int i=0;i<line;i++) cout<<"_"; }; int main() { largeIntegers large1; largeIntegers large2; largeIntegers large3; largeIntegers large4; string number; int line; cout<<"Enter a Large Two Large Integers Integer 1: "; large1.input(); cout<<"Integer 2: "; large2.input(); large1.setInteger(); large2.setInteger(); large3=large1+large2; large4=large1-large2; line=large3.returnsize(); cout<<" Addition: "<<large1<<" + "<<large2<<" "; > > outLine(line); cout<<" "<<large3; cout<<" Subtraction: "<<large1<<" - "<<large2<<" "; outLine(line); cout<<" "<<large4; cin.get(); cin.get(); return 0; } largeIntegers::largeIntegers() { size=0; for(int i=0;i<LIMIT;i++) num[i]=0; } void largeIntegers::input() { cin>>numword; } void largeIntegers::setInteger() { size=numword.length(); //num = new int[10]; for(int i=0; i < size ;i++) { digit[0]=numword.at((size-1) - i); num[i]=atoi(digit); } } void largeIntegers::setSize(int line) { size=line; } int largeIntegers::returnsize() { return size; } largeIntegers largeIntegers::operator+ (const largeIntegers& otherInteger) const { largeIntegers temp; if(size>=otherInteger.size) temp.size=size; else temp.size=otherInteger.size; int add=0; for(int i=0; i<temp.size;i++) { temp.num[i]=0; if(add==1) { temp.num[i]+=add; add=0; } if(i<size) temp.num[i]+=num[i]; if(i<otherInteger.size) temp.num[i]+=otherInteger.num[i]; if(temp.num[i]>=10) { temp.num[i]-=10; add=1; if(i==temp.size-1) temp.size++; } } return temp; } largeIntegers largeIntegers::operator- (const largeIntegers& otherInteger) const { largeIntegers temp; if(size>=otherInteger.size) temp.size=size; else temp.size=otherInteger.size; int minus=0; for(int i=0; i < temp.size ;i++) { if(size>=otherInteger.size && num[temp.size-1]>=otherInteger.num[temp.size-1]) { if(i<size) temp.num[i] = num[i]; else temp.num[i] = 0; if(minus==1) { temp.num[i]-=minus; minus=0; } if(i<otherInteger.size) temp.num[i]-=otherInteger.num[i]; if(temp.num[i]<0) { if(!(i==temp.size-1)) temp.num[i]+=10; minus=1; } } else { if(i<otherInteger.size) temp.num[i] = otherInteger.num[i]; else temp.num[i] = 0; if(minus==1) { temp.num[i]-=minus; minus=0; } if(i<size) temp.num[i]-=num[i]; if(temp.num[i]<0) { if(!(i==temp.size-1)) temp.num[i]+=10; minus=1; } if(i==(temp.size-1)) if(temp.num[i]==0) temp.num[i]=-1; else temp.num[i]*=(-1); } } if(otherInteger.size>=size && otherInteger.num[temp.size] >= num[temp.size]) { bool tell=true; for(int i=(temp.size-1);i>=0;i--) { if(temp.num[i]>0 && tell) { temp.num[i]*=-1; tell=false; } } } return temp; } return difference;}void largeIntegers::print() const{for(int idx = size - 1; idx >= 0; --idx) cout << numbers[idx]; }

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote