#include <iostream>
#include <string>
#define MaxCharBufferSize 100
#define MaxIntBufferSize 50
#define CharPerInteger 4
#define CoverPerInteger 100000000
using namespace std;
/*void reversethearray(char* intarray,int lengthofarray){
char *arrayb=new char(lengthofarray);
for (int i=0;i<lengthofarray;i++)
{
arrayb[i]=intarray[i];
}
for (int i=0;i<lengthofarray;i++)
{
intarray[lengthofarray-i-1]=arrayb[i];
}
}
*/
int tens(int pow){
int result=1;
if(pow==0)
return result;
for (int i=0;i<pow;i++)
{
result=result*10;
}
return result;
}
int StringtoInteger(char* stringa,int* inta){
int length=strlen(stringa);
int count_size=length/CharPerInteger;
if (length%CharPerInteger!=0)
{
count_size++;
}
for (int i=0;i<count_size;i++)
{
int buffer=0;
for (int j=0;j<CharPerInteger&&(i*CharPerInteger+j)<length;j++)
{
buffer=buffer+(stringa[length-i*CharPerInteger-j-1]-'0')*tens(j);
// cout<<buffer<<'/t';
}
inta[i]=buffer;
}
return count_size;
}
void Printthearray(int* inta,int length_string){
for (int i=0;i<length_string;i++)
{
cout<<inta[i]<<'/t';
}
cout<<length_string<<endl;
}
int IntegerAnd(int* integera,int lengthofa,int* integerb,int lengthofb){
bool flags[MaxIntBufferSize]={false};
int length=lengthofa;
if (lengthofa<lengthofb)
{
length=lengthofb;
for(int i=lengthofa;i<length;i++)
integera[i]=0;
}
else
for (int i=lengthofb;i<length;i++)
{
integerb[i]=0;
}
cout<<"length="<<length<<endl;
for (int i=0;i<length;i++)
{
int sum=integera[i]+integerb[i];
if (sum>=CoverPerInteger)
{
flags[i]=true;
}
cout<<"flags("<<i<<")="<<flags[i]<<'/t';
integera[i]=sum;
cout<<integera[i]<<'/t';
}
cout<<endl;
for (int i=0;i<length;i++)
{
if (flags[i]==true)
{
integera[i]=integera[i]-CoverPerInteger;
integera[i+1]++;
if (integera[i+1]>=CoverPerInteger)
{
flags[i+1]=true;
}
}
if (flags[length-1]==true)
{
integera[length]=1;
length++;
}
}
cout<<"True length is:"<<length<<endl;
return length;
}
int IntegerMulti(int* intarray1,int length1,int* intarray2,int length2,int* resultarray){
int length=length1+length2;
for (int i=0;i<length;i++)
{
resultarray[i]=0;
}
for (int i=0;i<length1;i++)
{
for (int j=0;j<length2;j++)
{
resultarray[i+j]+=intarray1[i]*intarray2[j];
//cout<<i+j<<':'<<resultarray[i+j]<<'/t';
}
}
// cout<<endl;
Printthearray(resultarray,length);
for (int i=0;i<length-1;i++)
{
int Mask=10000;
resultarray[i+1]+=resultarray[i]/Mask;
resultarray[i]=resultarray[i]%Mask;
}
while (resultarray[length-1]==0&&length>1)
{
length--;
}
return length;
}
void printtheresult( int* integer, int length )
{
cout << "Last Result=" << endl;
cout<<integer[length-1];
for (int i=length-2;i>=0;i--)
{
int temp=integer[i];
int Mask=1000;
while(temp<Mask&&Mask>1)
{
cout<<'0';
Mask/=10;
}
cout<<temp;
}
}
void main(){
char string1[MaxCharBufferSize];
char string2[MaxCharBufferSize];
int integer1[MaxIntBufferSize];
int integer2[MaxIntBufferSize];
int result[MaxIntBufferSize];
//cout<<sizeof(int)<<endl;
cout<<"Enter the first number:";
cin>>string1;
cout<<"Enter the second number:";
cin>>string2;
// reversethearray(string1,strlen(string1));
// reversethearray(string2,strlen(string2));
int length1=StringtoInteger(string1,integer1);
int length2=StringtoInteger(string2,integer2);
Printthearray(integer1,length1);
Printthearray(integer2,length2);
// int length=IntegerAnd(integer1,length1,integer2,length2);
int length=IntegerMulti(integer1,length1,integer2,length2,result);
// Printthearray(integer1,length);
Printthearray(result,length);
printtheresult(result,length);
// printtheresult(integer1,length);
for (;;)
{
}
}