Oppure

Loading
23/07/08 11:32
Misciu87
Postato originariamente da Misciu87:

 int n=max(getlength2(num1),getlength2(num2))+1;
   int *res=(int *)malloc((n+n)*sizeof(int));


possiamo ripartire da qui?
ora cerco di impegnarmi seriamente..
Mi avevi detto che la prima riga era sbagliata ma la seconda no?
aaa
23/07/08 11:48
lorenzo
Postato originariamente da gantonio:

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 ...



Cosa metti tu in n??
Metti il num di cifre del numero più grande.
Quello che fai è:

n = max(999,99999) = 5
poi n+n = 10 Errato!!! 999*99999 = risult con 8 cifre

Però come vedi dall'esempio di gantonio devi trovare le cifre del primo numero e sommarle alle cifre del secondo numero.
Quindi:

n = getlength2( num1 ) + getlength2( num2 );

Guardiamo sempre l'esempio sopra...
getlength2( num1 ) = 3
getlength2( num2 ) = 5
n = 3 + 5;

adesso dimmi tu. Cosa metti nella malloc della seconda riga?
aaa
23/07/08 11:51
Misciu87
Postato originariamente da gantonio:

Non interessa TUTTO il codice ... ti avevo detto solo le prime due righe della nuova funzione ... quindi

int n=max(getlength2(num1),getlength2(num2))+n; 
int *res=(int *)malloc((n+n)*sizeof(int)); 


la seconda va bene perche' allochi n+n interi ... ma la prima no ... rileggila e correggila.


Mi state confondendo di + le idee cosi?! lui mi aveva detto che la seconda andava bene
aaa
23/07/08 13:00
Misciu87
quindi

int n=max(getlength2(num1),getlength2(num2));
int *res=(int *)malloc((n+n-2)*sizeof(int));
aaa
23/07/08 15:35
lorenzo
Io l'ho fatto e funziona tranquillo.

Allora, le due righe che hai postato non vanno bene.

La prima mettila come ti ho detto io.
La seconda prova a pensare a cosa mettere al posto di n+n. Guarda gli esempi che ti ho scritto prima...

Seconda cosa. Ho provato il tuo codice e c'é un errore.

- nel ciclo for, quando passi res come paramtro, la prima volta non è inizializzato.
es:
int x;
x = x + 1;
x non viene inizializzato la prima volta, qundi assume un valore a caso.

devi azzerare ogni cella dell'array res prima di usarlo.

prova a fare le modifiche ed eseguilo. Se ci sono problemi fammi sapere.
Dai che riusciamo a finirlo!:k:
aaa
23/07/08 15:57
Misciu87
grazie..

allora la prima riga è

int n = getlength2( num1 ) + getlength2( num2 );

la seconda sarà

int *res=(int *)malloc((n)*sizeof(int));

sempre se ho capito bene ma sicuramente no
aaa
23/07/08 15:58
lorenzo
Postato originariamente da lorenzo:

Io l'ho fatto e funziona tranquillo.




rettifico. Ho trovato un altro bug
Il problema è nella condizione del ciclo for. Se confronti con la i il puntatore, ovviamente verrà confrontata solo la prima posizione del puntatore.
Quindi:

num1 = xxxxx...
num2 = x tutto ok!

num1 = xxxx...
num2 = xxxx...
non funziona perché il ciclo non va bene.
Prova anche a risolvere questo problema...;)

Hai capito questa volta, bene.:D
Ultima modifica effettuata da lorenzo 23/07/08 15:59
aaa
23/07/08 16:01
Misciu87
per la seconda parte non ho capito cosa intendi devo mettere nel main

res=loadlist("0";);


??
aaa