#include "utils.h" #include #include struct String mult(struct String numb1, struct String numb2) { struct String n1 = numb1; struct String n2 = numb2; byte carryover = 0; if (numb2.length>numb1.length) { n1=numb2; n2=numb1; } int addends[n2.length][n1.length+1]; for (int i=0;i=0;i--) { carryover=0; for (int j=n1.length-1;j>=0;j--) { int mult = (n1.str[j]-'0')*(n2.str[i]-'0')+((carryover!=0)?carryover:0); //printf(" %d/%d\n",mult,carryover); carryover=0; if (mult>=10) { carryover=mult/10; mult=mult%10; } addends[(n2.length-1)-i][j+1]=mult; } if (carryover>0) { addends[(n2.length-1)-i][0]=carryover; } } //printIntDoubleArr(n2.length,n1.length+1,addends); struct String sum = {1,"0"}; for (int i=0;i=numb2.length) { for (int offset=0;offsetoffset) { //printf("%c %c\n",numb1.str[numb1.length-offset-1],numb2.str[numb2.length-offset-1]); int sum=((numb1.str[numb1.length-offset-1]-'0')+(numb2.str[numb2.length-offset-1]-'0'))+((carryover>0)?carryover--:0); if (sum>=10) { carryover=1; sum-=10; } str[offset]=sum+'0'; } else { str[offset]=numb1.str[numb1.length-offset-1]+((carryover>0)?carryover--:0); } //str[offset+1]='\0'; } } else { for (int offset=0;offsetoffset) { //printf("%c %c\n",numb1.str[numb1.length-offset-1],numb2.str[numb2.length-offset-1]); int sum=((numb1.str[numb1.length-offset-1]-'0')+(numb2.str[numb2.length-offset-1]-'0'))+((carryover>0)?carryover--:0); if (sum>=10) { carryover=1; sum-=10; } str[offset]=sum+'0'; } else { str[offset]=numb2.str[numb2.length-offset-1]+((carryover>0)?carryover--:0); } //str[offset+1]='\0'; } } if (carryover>0) { str = realloc(str,++digitCount); str[digitCount-1]='1'; //str[digitCount]='\0'; } for (int i=0;i