class Solution {
public:
void add(char str1[],char str2[]){ //function to add two strings
int l1=strlen(str1);
int l2=strlen(str2);
// char result[100000];
int i=l1-1,j=l2-1;
// cout << l1 << " " << l2 << endl;
int carry=0;
stack < int > s;
while(i>=0 && j>=0){
int sum=carry+(str1[i]-'0')+(str2[j]-'0');
carry=sum/10;
sum=sum%10;
s.push(sum+48);
i--;
j--;
}
if(i==-1 && j==-1 && carry!=0){
s.push(carry+48);
}
if(i>=0){
while(i>=0){
int sum=carry+(str1[i]-'0');
carry=sum/10;
sum=sum%10;
s.push(sum+48);
i--;}
if(i==-1 && carry!=0){
s.push(carry+48);
}
}
if(j>=0){
while(j>=0){
int sum=carry+(str2[j]-'0');
carry=sum/10;
sum=sum%10;
s.push(sum+48);
j--;}
if(j==-1 && carry!=0){
s.push(carry+48);
}
}
int k=0;
while(!s.empty()){
str1[k]=s.top();
s.pop();
k++;
}
str1[k]='\0';
//return result;
}
string multiply(string num1, string num2) {
int l1=num1.size();
int l2=num2.size();
if(num1[0]=='0')
return "0";
if(num2[0]=='0')
return "0";
char mult[100000];
char result[100000];
result[0]='\0';
if(l1==0 && l2==0)
return "";
if(l1>=l2){ //if nums2 is smaller
int j=l2-1;
stack < char > s;
int cnt=0;
while(j>=0){
int n1=num2[j]-'0';
int i=l1-1;
int carry=0;
int c=0;
while(c!=cnt){
s.push(48);
c++;}
while(i>=0){
int n2=num1[i]-'0';
int sum=carry+(n1*n2);
carry=(sum)/10;
s.push((sum%10)+48);
i--;
}
if(carry){
s.push(carry+48);
}
int k=0;
while(!s.empty()){
mult[k++]=s.top();
s.pop();
}
mult[k]='\0';
add(result,mult);
cnt++;
j--;
}
}
else{ //if nums1 is smaller
int j=l2-1;
stack < char > s;
int cnt=0;
while(j>=0){
int n1=num2[j]-'0';
int i=l1-1;
int carry=0;
int c=0;
while(c!=cnt){
s.push(48);
c++;}
while(i>=0){
int n2=num1[i]-'0';
int sum=carry+(n1*n2);
carry=(sum)/10;
s.push((sum%10)+48);
i--;
}
if(carry){
s.push(carry+48);
}
int k=0;
while(!s.empty()){
mult[k++]=s.top();
s.pop();
}
mult[k]='\0';
add(result,mult);
cnt++;
j--;
}
}
return (string)result;
}
};
public:
void add(char str1[],char str2[]){ //function to add two strings
int l1=strlen(str1);
int l2=strlen(str2);
// char result[100000];
int i=l1-1,j=l2-1;
// cout << l1 << " " << l2 << endl;
int carry=0;
stack < int > s;
while(i>=0 && j>=0){
int sum=carry+(str1[i]-'0')+(str2[j]-'0');
carry=sum/10;
sum=sum%10;
s.push(sum+48);
i--;
j--;
}
if(i==-1 && j==-1 && carry!=0){
s.push(carry+48);
}
if(i>=0){
while(i>=0){
int sum=carry+(str1[i]-'0');
carry=sum/10;
sum=sum%10;
s.push(sum+48);
i--;}
if(i==-1 && carry!=0){
s.push(carry+48);
}
}
if(j>=0){
while(j>=0){
int sum=carry+(str2[j]-'0');
carry=sum/10;
sum=sum%10;
s.push(sum+48);
j--;}
if(j==-1 && carry!=0){
s.push(carry+48);
}
}
int k=0;
while(!s.empty()){
str1[k]=s.top();
s.pop();
k++;
}
str1[k]='\0';
//return result;
}
string multiply(string num1, string num2) {
int l1=num1.size();
int l2=num2.size();
if(num1[0]=='0')
return "0";
if(num2[0]=='0')
return "0";
char mult[100000];
char result[100000];
result[0]='\0';
if(l1==0 && l2==0)
return "";
if(l1>=l2){ //if nums2 is smaller
int j=l2-1;
stack < char > s;
int cnt=0;
while(j>=0){
int n1=num2[j]-'0';
int i=l1-1;
int carry=0;
int c=0;
while(c!=cnt){
s.push(48);
c++;}
while(i>=0){
int n2=num1[i]-'0';
int sum=carry+(n1*n2);
carry=(sum)/10;
s.push((sum%10)+48);
i--;
}
if(carry){
s.push(carry+48);
}
int k=0;
while(!s.empty()){
mult[k++]=s.top();
s.pop();
}
mult[k]='\0';
add(result,mult);
cnt++;
j--;
}
}
else{ //if nums1 is smaller
int j=l2-1;
stack < char > s;
int cnt=0;
while(j>=0){
int n1=num2[j]-'0';
int i=l1-1;
int carry=0;
int c=0;
while(c!=cnt){
s.push(48);
c++;}
while(i>=0){
int n2=num1[i]-'0';
int sum=carry+(n1*n2);
carry=(sum)/10;
s.push((sum%10)+48);
i--;
}
if(carry){
s.push(carry+48);
}
int k=0;
while(!s.empty()){
mult[k++]=s.top();
s.pop();
}
mult[k]='\0';
add(result,mult);
cnt++;
j--;
}
}
return (string)result;
}
};
No comments:
Post a Comment