16/07/08 21:46
gantonio
Okay ... quindi come riscrivi le prime due righe di codice ?
aaa
16/07/08 21:51
Misciu87
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;
}
int *add(int *num1, int *num2)
{
int n=max(getlength2(num1),getlength2(num2))+n;
int *res=(int *)malloc((n+n)*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 *mult(int *num1, int *num2)
{
int n=max(getlength2(num1),getlength2(num2))+n;
int *res=(int *)malloc((n+n)*sizeof(int));
int i = 0;
for(i = 0; i < *num2; i++)
{
res = add(res, num1);
}
return res;
}
Ultima modifica effettuata da Misciu87 16/07/08 21:52
aaa
16/07/08 22:00
Misciu87
la funziona add va bene o no? è sbagliata loadlist?
aaa
16/07/08 22:06
gantonio
No ... non ci siamo ...
In una moltiplicazione puoi avere due numeri, uno lungo ad esempio 3 cifre e l'altro 5 cifre ... quindi
999 x 99999
il risultato e' 99899001 ed e' di 8 cifre quindi di 3+5 cifre ...
Quindi non e' sempre detto che e' di lunghezza n+n ma devi calcolare la lunghezza del primo e la lunghezza del secondo e metterlo nella variabile n e poi utilizzare la variabile n nella malloc ...
aaa
16/07/08 22:08
Misciu87
va bè dai è lo stesso ho già capito..non so fare..
aaa