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

Using this code which already adds large integers, how would I incorporate subtr

ID: 3542053 • Letter: U

Question

Using this code which already adds large integers, how would I incorporate subtraction, multiplication, and comparing both integers?





#include<iostream>
using namespace std;
int getnum(string mess,int[]);
int add(int [], int [],int[] ,int,int);
void print(int a[],int);
bool checkinput(string);
int main()
{int a[21];
int b[21];
int c[51];
int i, lena,lenb,lenc;
lena=getnum("first number: ",a);
cout<<endl;
lenb=getnum("second number: ",b);
lenc=add(a,b,c,lena,lenb);
cout<<" ";
print(a,lena);
cout<<"+ ";
print(b,lenb);
for(i=0;i<lenc+5;i++)
cout<<"-";
cout<<" ";
print(c,lenc);
system("pause");
return 0;
}
bool checkinput(string in)
{int i;
if(in.length()>20)
return false;
for(i=0;i<in.length();i++)
if(in[i]<'0'||in[i]>'9')
{cout<<"invalid input ";
return false;
}
return true;
}
int getnum(string mess,int a[])
{int i;
for(i=0;i<21;i++)
a[i]=0;
string input;
cout<<"Enter "<<mess;
cin>>input;
while(!checkinput(input))
{cout<<"Enter "<<mess;
cin>>input;
}
for(i=0;i<input.length();i++)
a[input.length()-1-i]=input[i]-'0';
return input.length();
}
int add(int a[], int b[],int c[],int lena,int lenb)
{int i,n,carry=0,d;
cout<<endl;
for(i=0;i<21;i++)
c[i]=0;
if(lena>lenb)
n=lena;
else
n=lenb;

for(i=0;i<n;i++)
{d=a[i]+b[i]+carry;
c[i]=d%10;
carry=d/10;
}
if(carry==0)
return n;
else
c[i]=carry;

return n+1;
}
void print(int a[],int len)
{int i;
for(i=len-1;i>=0;i--)
cout<<a[i];
cout<<endl;
}

Explanation / Answer

#include <conio.h>
#include <string>
#include <iostream>

using namespace std;

class LargeInteger
{
private:
   string number;
  
   int char2digit(char ch)
   {
       return ch - 48;
   }
  
   char digit2char(int digit)
   {
       return digit + 48;
   }
  
   void fillNumber(string& number, int width)
   {
       int delta = width - number.size();
       for (int c = 0; c < delta; c++)
           number.insert(0, "0");
   }
  
   void normalizeNumber(string& number)
   {
       while ((*number.begin() == '0') && (number.size() > 1))
           number.erase(number.begin());
   }
  
public:
   LargeInteger(string number)
   {
       this->number = number;
   }
  
   LargeInteger operator + (LargeInteger& integer)
   {
       string a = this->number, b = integer.getNumber();
       int width = (a.size() > b.size()) ? a.size() : b.size();
       width++;
      
       fillNumber(a, width);
       fillNumber(b, width);
      
       string result(width, '0');
       int rest = 0;
       int tmp;
      
       for (int d = width - 1; d >= 0; d--)
       {
           tmp = char2digit(a[d]) + char2digit(b[d]) + rest;
           result[d] = digit2char(tmp % 10);
           rest = (tmp >= 10) ? 1 : 0;
       }
      
       normalizeNumber(result);
       return LargeInteger(result);
   }
  
   LargeInteger operator * (LargeInteger& integer);
   LargeInteger operator - (LargeInteger& integer);
  
   string getNumber()
   {
       return this->number;
   }
  
   void print()
   {
       cout << number << endl;
   }
};

int main()
{
   LargeInteger a("5890897398729866897045987689796745608754");
   LargeInteger b("2346579086098739646987349632476596898635");
  
   cout << "a = ";
   a.print();
   cout << "b = ";
   b.print();
  
   cout << "a + b = ";
   (a + b).print();
  
   cout << "a - b = ";
   (a - b).print();
  
   cout << "a * b = ";
   (a * b).print();
  
   _getch();
   return 0;
}