Question #55621

Write functions for doing
arithmetic on 100-digit integers. Include functions for
input, output, and addition. The input function should not
print anything. The addition function should do no
reading or printing. No function should make any
assumptions about how the other functions or main
program work. The number of digits should be in a global
constant. The function prototypes should be as follows:
void readBig(int[])
void addBig(int[],int[],int[])
void printBig(int[])

Expert's answer

#include <fstream>
#include <string>
using namespace std;

ifstream in("INPUT.TXT");
ofstream out("OUTPUT.TXT");

const int MAXSIZE=102;

void readlong(int *a)
{
int i;
string s;
in>>s;
a[0]=s.length();

for (int i=1; i<=a[0]; ++i)
a[a[0]-i+1]=s[i-1]-48;
}

void writelong(int *a)
{
for (int i=a[0]; i>=1; i--)
out<<a[i];
}

int complong(int *a, int *b){
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
for (int i=a[0]; i<1; ++i)
{
if(a[i] < b[i]) return -1;
if(a[i] > b[i]) return 1;
}
return 0;
}

void sumlong(int *a, int *b, int *wheresave)
{
int m=0, minimal=0;
int c=0;

m = (a[0] > b[0]) ? a[0] : b[0];
minimal=(a[0] < b[0]) ? a[0] : b[0];

for (int i=1; i<=m+1; i++)
{
if(complong(a,b)!=-1)
wheresave[i]=a[i];
else
wheresave[i]=b[i];
}

for (int i=1; i<=minimal; i++)
{
c = a[i]+b[i]+c; //ïîëó÷àåì ñóììó
wheresave[i] = c%10; //îñòàâëÿåì â òåêóùåì ðàçðÿäå îñòàòîê
c = c/10; //öåëóþ ÷àñòü ïåðåíîñèì â ñëåäóþùèé ðàçðÿä
}
if(c>0) //åñëè öåëûé îñòàòîê ïîñëå ñëîæåíèÿ áîëüøå íóëÿ, òî
{

for (int i=minimal+1; i<=m; i++)
{
c = c+wheresave[i];
wheresave[i] = c%10;
c = c/10;
}
}
if(c>0)
{
m++;
wheresave[m] = c;
wheresave[0]=m;
}
else wheresave[0]=m;
}

int main()
{

int a[MAXSIZE], b[MAXSIZE], ok[MAXSIZE+5];

readlong(a);
readlong(b);

sumlong(a,b, ok);

writelong(ok);
return 0;
}
LATEST TUTORIALS
APPROVED BY CLIENTS