Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C] Moltiplicazione di interi di lunghezza arbitraria
Forum - C/C++ - [C] Moltiplicazione di interi di lunghezza arbitraria - Pagina 3

Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 ] Precedente | Prossimo
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 23:46
Mercoledì, 16/07/2008
Okay ... quindi come riscrivi le prime due righe di codice ?

PM Quote
Avatar
Misciu87 (Normal User)
Pro


Messaggi: 68
Iscritto: 01/07/2008

Segnala al moderatore
Postato alle 23:51
Mercoledì, 16/07/2008
Codice sorgente - presumibilmente C++

  1. int *loadlist(char *list)
  2. {
  3.         int n=getlength(list),i;
  4.         int *num=(int *)malloc((n+1)*sizeof(int));
  5.         char tmp;
  6.  
  7.         for(i=0; i<n; i++) {
  8.                 tmp=list[i];
  9.                 num[n-1-i]=atoi(&tmp);
  10.         }
  11.         num[n]=-1;
  12.         return num;
  13. }
  14.  
  15.  
  16. int *add(int *num1, int *num2)
  17. {
  18.         int n=max(getlength2(num1),getlength2(num2))+n;
  19.         int *res=(int *)malloc((n+n)*sizeof(int));
  20.         int tmp,rest=0,i=0;
  21.  
  22.         while(num1[i]!=-1 && num2[i]!=-1)
  23.     {
  24.                 tmp=(num1[i]+num2[i]+rest);
  25.                 res[i]=tmp%10;
  26.                 rest=tmp/10;
  27.                 i++;
  28.         }      
  29.         if(num1[i]!=-1) {
  30.                  while(num1[i]!=-1)
  31.          {
  32.                         tmp=(num1[i]+rest);
  33.                         res[i]=tmp%10;
  34.                         rest=tmp/10;
  35.                         i++;
  36.                 }
  37.         } else if (num2[i]!=-1)
  38.       {
  39.                 while(num2[i]!=-1)
  40.         {
  41.                         tmp=(num2[i]+rest);
  42.                         res[i]=tmp%10;
  43.                         rest=tmp/10;
  44.                         i++;
  45.                 }
  46.         }
  47.         if(rest!=0) res[i++]=rest;
  48.         res[i]=-1;
  49.  
  50.         return res;
  51. }
  52.  
  53.  
  54. int *mult(int *num1, int *num2)
  55. {
  56.    int n=max(getlength2(num1),getlength2(num2))+n;
  57.    int *res=(int *)malloc((n+n)*sizeof(int));
  58.  
  59.    int i = 0;
  60.    for(i = 0; i < *num2; i++)
  61.    {
  62.       res = add(res, num1);
  63.    }
  64.    return res;
  65. }


Ultima modifica effettuata da Misciu87 il 16/07/2008 alle 23:52
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 23:58
Mercoledì, 16/07/2008
Non interessa TUTTO il codice ... ti avevo detto solo le prime due righe della nuova funzione ... quindi

Codice sorgente - presumibilmente C/C++

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



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

PM Quote
Avatar
Misciu87 (Normal User)
Pro


Messaggi: 68
Iscritto: 01/07/2008

Segnala al moderatore
Postato alle 0:00
Giovedì, 17/07/2008
la funziona add va bene o no? è sbagliata loadlist?

PM Quote
Avatar
Misciu87 (Normal User)
Pro


Messaggi: 68
Iscritto: 01/07/2008

Segnala al moderatore
Postato alle 0:02
Giovedì, 17/07/2008
Codice sorgente - presumibilmente C/C++

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


PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 0:06
Giovedì, 17/07/2008
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 ...

PM Quote
Avatar
Misciu87 (Normal User)
Pro


Messaggi: 68
Iscritto: 01/07/2008

Segnala al moderatore
Postato alle 0:08
Giovedì, 17/07/2008
va bè dai è lo stesso ho già capito..non so fare..

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 0:16
Giovedì, 17/07/2008
Beh ... buonanotte ... studia ...

PM Quote
Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 ] Precedente | Prossimo