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 8

Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 ] Precedente | Prossimo
Avatar
volley.sil (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/05/2008

Segnala al moderatore
Postato alle 11:59
Martedì, 22/07/2008
ciao ragazzi io avrei lo steso problema di michelle 87!!!
come posso fare per farmi dare una mano

evidentemente siamo nella stessa università e abbiamo lo stesso progetto da fare..cosa mi consigliate di fare..da dove posso iniziare a modificare il file???

PM Quote
Avatar
Misciu87 (Normal User)
Pro


Messaggi: 68
Iscritto: 01/07/2008

Segnala al moderatore
Postato alle 12:04
Martedì, 22/07/2008
Codice sorgente - presumibilmente C++

  1. void print(int *res, int i)
  2. {
  3.     if(res[i]!=-1) {
  4.         print(res,i+1);
  5.         if (i!=0) printf("%d",res[i]);
  6.         else printf("%d\n",res[i]);    
  7.     }
  8. }




PM Quote
Avatar
volley.sil (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/05/2008

Segnala al moderatore
Postato alle 12:07
Martedì, 22/07/2008
SCrivendo n al posto di 1000000 nelle prime due righe dove viene allocata la memoria mi d segmentation fault mi sai dire gantonio perchè???

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<time.h>
  4.  
  5. int getlength(char *list)
  6. {
  7.     int i=0;
  8.     while(list[i]!='\0') i++;
  9.     return i;
  10. }
  11.  
  12. int getlength2(int *list)
  13. {
  14.     int i=0;
  15.     while(list[i]!=-1) i++;
  16.     return i;
  17. }
  18.  
  19. int *loadlist(char *list)
  20. {
  21.     int n=getlength(list),i;
  22.     int *num=(int *)malloc((n+1)*sizeof(int));
  23.     char tmp;
  24.  
  25.     for(i=0; i<n; i++) {
  26.         tmp=list[i];
  27.         num[n-1-i]=atoi(&tmp);
  28.     }
  29.     num[n]=-1;
  30.     return num;
  31. }
  32.  
  33. void print(int *res, int i)
  34. {
  35.     if(res[i]!=-1) {
  36.         print(res,i+1);
  37.         if (i!=0) printf("%d",res[i]);
  38.         else printf("%d\n",res[i]);    
  39.     }
  40. }
  41.  
  42. int max(int x, int y)
  43. {
  44.     if(x>=y) return x;
  45.     else return y;
  46. }
  47.  
  48.  
  49. int *add(int *num1, int *num2)
  50. {
  51.     int n=max(getlength2(num1),getlength2(num2))+n;
  52.     int *res=(int *)malloc((n+n)*sizeof(int));
  53.     int tmp,rest=0,i=0;
  54.  
  55.     while(num1[i]!=-1 && num2[i]!=-1)
  56.     {
  57.         tmp=(num1[i]+num2[i]+rest);
  58.         res[i]=tmp%10;
  59.         rest=tmp/10;
  60.         i++;
  61.     }    
  62.     if(num1[i]!=-1) {
  63.          while(num1[i]!=-1)
  64.          {
  65.             tmp=(num1[i]+rest);
  66.             res[i]=tmp%10;
  67.             rest=tmp/10;
  68.             i++;
  69.         }
  70.     } else if (num2[i]!=-1)
  71.       {
  72.         while(num2[i]!=-1)
  73.         {
  74.             tmp=(num2[i]+rest);
  75.             res[i]=tmp%10;
  76.             rest=tmp/10;
  77.             i++;
  78.         }
  79.     }
  80.     if(rest!=0) res[i++]=rest;
  81.     res[i]=-1;
  82.  
  83.     return res;
  84. }
  85.  
  86. int *mult(int *num1, int *num2)
  87. {
  88.    int n=max(getlength2(num1),getlength2(num2))+100000;
  89.    int *res=(int *)malloc((n+1000000)*sizeof(int));
  90.    
  91.    int i = 0;
  92.    for(i = 0; i < *num2; i++)
  93.    {
  94.       res = add(res, num1);
  95.    }
  96.    return res;
  97. }
  98.  
  99.  
  100. int main(int argc, const char *argv[])
  101. {
  102.     clock_t start, end;
  103.     int *num1, *num2, *res;
  104.     if(argc!=3)
  105.     {
  106.         printf("Usage: add <integer 1> <integer 2>\n");
  107.         return 1;
  108.     }
  109.     start=clock();
  110.     num1=loadlist((char *)argv[1]);
  111.     num2=loadlist((char *)argv[2]);
  112.     res=add(num1,num2);
  113.     res=mult(num1,num2);
  114.     end=clock();
  115.     printf("%g\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
  116.     print(res,0);
  117.     return 0;
  118. }


PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 12:08
Martedì, 22/07/2008
Testo quotato

Postato originariamente da volley.sil:

ciao ragazzi io avrei lo steso problema di michelle 87!!!
come posso fare per farmi dare una mano



Perche' non studiate insieme ?

PM Quote
Avatar
Misciu87 (Normal User)
Pro


Messaggi: 68
Iscritto: 01/07/2008

Segnala al moderatore
Postato alle 12:09
Martedì, 22/07/2008
mi rispondi a quello che ti ho chiesto

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 12:21
Martedì, 22/07/2008
Testo quotato

Postato originariamente da Misciu87:

mi rispondi a quello che ti ho chiesto



No ... perche' non l'ho capito ...

La printf e' inserita all'interno di una funzione (print) che viene chiamata da altre parti del programma. Come diavolo faccio a sapere perche' la printf non ti da' i risultati che ti aspetti?

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 12:23
Martedì, 22/07/2008
Sentite ... per concludere il discorso (almeno da parte mia) ... vi do' l'ultimo consiglio ...

Scrivete in un forum dove c'e' la possibilita' di avere scritto del codice a fronte di una retribuzione ... Indicate quanto paghereste e i tempi e penso che riuscirete ad ottenere il vostro programma.

Ad esempio

http://forum.html.it/forum/forumdisplay.php?s=&forumid=67

Buona fortuna

Ultima modifica effettuata da gantonio il 22/07/2008 alle 12:38
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 12:37
Martedì, 22/07/2008
Credo che la discussione sia degenerata troppo, la segnalerò al moderatore...

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