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;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.