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

In C++, the largest int value is 2147483647. So, an integer larger than this can

ID: 3770057 • Letter: I

Question

In C++, the largest int value is 2147483647. So, an integer larger than this cannot be stored and processed as an integer. Similarly, if the sum or product of two positive integers is greater than 2147483647, the result will be incorrect. One way to store and manipulate large integers is to store each individual digit of the number in an array.

Design a class named largeIntegers such that an object of this class can store an integer of any number of digits. Add operations to add, subtract, multiply, and compare integers stored in two objects. Also add constructors to properly initialize objects and functions to set, retrieve, and print the values of objects.

Requirements:

• composition of informative comments

• Implement the algorithm in C++, and verify that the algorithm works.

• Each class must contain a header file (.h) and an implementation file (.cpp).

Explanation / Answer

#include <iostream>
#include <cctype>
#include <cstring>
using namespace std;
#define DIGITS 20
class largeintegers
{
public:
largeintegers();
void Input();
void Output();
largeintegers operator+( largeintegers );
largeintegers operator-( largeintegers );
largeintegers operator*( largeintegers );
int operator==( largeintegers);
private:
int integer[ DIGITS ];
int len;
};
void largeintegers::Output()
{
int i;
for (i=len-1;i >= 0; i-- )
cout<<integer[i];
}
void largeintegers::Input()   
{
string in;
int i,j,k;
cout << "Enter a number("<<DIGITS<<" digits max):";
cin >> in;   
for(i=0;in[i]!='';i++);
len=i;
k=0;
for(j=i-1;j>=0;j--)
integer[j]=in[k++]-0;
}
largeintegers::largeintegers( )
{
for ( int i = 0; i <DIGITS; i++ )
integer[ i ] = 0;
len=DIGITS-1;
}
int largeintegers::operator==( largeintegers op2 )
{
int i;
if(len<op2.len)
return -1;
if(op2.len<len)
return 1;
for(i=len-1;i>=0;i--)
if(integer[i]<op2.integer[i])
return -1;
else if(op2.integer[i]<integer[i])
return 1;
return 0;
}
largeintegers largeintegers::operator+( largeintegers op2 )
{
largeintegers temp;
int carry = 0;
int c,i;
if(len>op2.len)
c=len;
else
c=op2.len;
for ( i=0; i<c; i++ )
{
temp.integer[ i ] =integer[ i ] + op2.integer[ i ] + carry;
if ( temp.integer[ i ] > 9 )
{
temp.integer[ i ] %= 10;
carry = 1;
}
else
carry = 0;
}
if(carry==1)
{
temp.len=c+1;
if(temp.len>=DIGITS)
cout<<"***OVERFLOW***** ";
else
temp.integer[i]=carry;
}
else
temp.len=c;
return temp;
}
largeintegers largeintegers::operator-( largeintegers op2 )
{
largeintegers temp;
int c;
if(len>op2.len)
c=len;
else
c=op2.len;
int borrow = 0;
for( int i = c;i >= 0;i--)
if(borrow==0)
{
if(integer[i]>=op2.integer[i])
temp.integer[i]=integer[i]-op2.integer[i];
else
{
borrow=1;
temp.integer[i]=integer[i]+10-op2.integer[i];
}
}
else
{
borrow=0;
if(integer[i]-1>=op2.integer[i])
temp.integer[i]=integer[i]-1-op2.integer[i];
else
{
borrow=1;
temp.integer[i]=integer[i]-1+10-op2.integer[i];
}
}
temp.len=c;
return temp;
}   
largeintegers largeintegers::operator*( largeintegers op2 )
{
largeintegers temp;
int i,j,k,tmp,m=0;
for (int i=0; i<op2.len; i++)
{
k=i;
for (j=0; j< len; j++)
{
tmp = integer[ j ] * op2.integer[i];
temp.integer[k] =temp.integer[k]+tmp;
temp.integer[k+1] =temp.integer[k+1]+ temp.integer[k]/10;
temp.integer[k] %=10;
k++;
if(k>m)
m=k;
}
}
temp.len=m;
if(temp.len>DIGITS)
cout<<"***OVERFLOW***** ";
return temp;
}
using namespace std;
int main()
{
int c;
largeintegers n1,n2,result;
n1.Input();
n2.Input();
n1.Output();
cout <<" + ";
n2.Output();
result=n1+n2;
cout<< " = " ;
result.Output();
cout << " ";
n1.Output();
cout <<" - ";
n2.Output();
result=n1-n2;
cout<< " = " ;
result.Output();
cout << " ";
n1.Output();
cout <<" * ";
n2.Output();
result=n1*n2;
cout<< " = " ;
result.Output();
cout << " ";
c=n1==n2;
n1.Output();
switch (c)
{
case -1: cout<<" is less than ";
break;
case 0: cout<<" is equal to ";
break;
case 1: cout<<" is greater than ";
break;
}
n2.Output();
cout << " ";
system("pause");
}