Il codice fa la moltiplicazione solo se gli inserisco nei numeri composta da una cifra solo per esempio 3*2, 2*2 ma non funziona con numeri di + cifre. Qualcuno può aiutarmi?
codice:
#include <stdio.h>
#include <stdlib.h>
int getlength(char *list)
{
int i=0;
while(list[i]!='\0') i++;
return i;
}
int getlength2(int *list)
{
int i=0;
while(list[i]!=-1) i++;
return i;
}
int *loadlist(char *list)
{
int n=getlength(list),i;
int *num=(int *)malloc((n+1)*sizeof(int));
char tmp;
for(i=0; i<n; i++)
{
tmp=list[i];
num[n-1-i]=atoi(&tmp);
}
num[n]=-1;
return num;
}
void print(int *res, int i)
{
if(res[i]!=-1)
{
print(res,i+1);
if (i!=0) printf("%d",res[i]);
else printf("%d\n",res[i]);
}
}
int max(int x, int y)
{
if(x>=y) return x;
else return y;
}
int *add(int *num1, int *num2)
{
int n=max(getlength2(num1),getlength2(num2))+1;
int *res=(int *)malloc((n+1)*sizeof(int));
int tmp,rest=0,i=0;
while(num1[i]!=-1 && num2[i]!=-1)
{
tmp=(num1[i]+num2[i]+rest);
res[i]=tmp%10;
rest=tmp/10;
i++;
}
if(num1[i]!=-1)
{
while(num1[i]!=-1)
{
tmp=(num1[i]+rest);
res[i]=tmp%10;
rest=tmp/10;
i++;
}
} else if (num2[i]!=-1)
{
while(num2[i]!=-1)
{
tmp=(num2[i]+rest);
res[i]=tmp%10;
rest=tmp/10;
i++;
}
}
if(rest!=0) res[i++]=rest;
res[i]=-1;
return res;
}
int main(int argc, const char *argv[])
{
clock_t start, end;
int *num1, *num2, *res;
if(argc!=3)
{
printf("Usage: add <integer 1> <integer 2>\n");
return 1;
}
num1=loadlist((char *)argv[1]);
num2=loadlist((char *)argv[2]);
start=clock();
res=add(num1,num2);
end=clock();
printf("%g\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
print(res,0);
return 0;
}