Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26

    [B][C] moltiplicazione numeri[/B]

    ciao a tutti devo moltiplicare due interi di lunghezza variabile

    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    #include<time.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))+100000; 
        int *res=(int *)malloc((n+10000)*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))+100000; 
       int *res=(int *)malloc((n+1000000)*sizeof(int)); 
       
       int i = 0; 
       for(i = 0; i < *num2; i++) 
       { 
          res = add(res, num1); 
       } 
       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; 
        } 
        start=clock(); 
        num1=loadlist((char *)argv[1]); 
        num2=loadlist((char *)argv[2]); 
        res=add(num1,num2); 
        res=mult(num1,num2); 
        end=clock(); 
        printf("%g\n",(double)(end-start)/(double)CLOCKS_PER_SEC); 
        print(res,0); 
        return 0; 
    }
    nella funzione mult le righe per l'allocazione di memoria possono andare bene cosi perche mi segnala un errore di segmentation fault

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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ne avevamo discusso gia' qui

    http://forum.html.it/forum/showthrea...readid=1253763

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26
    io ho fatto solo una DOMANDA

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E allora?

    Dato che s'era gia' parlato del tuo problema, non sapendo come e' finita, l'ho ricordato ...

    E poi, l'errore di segmentation fault te lo da' in quelle due righe? Mi sembra impossibile ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26
    è un problema di allocazione di memoria per me è in quelle due righe di codice, ma non sono sicura..

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quelle due linee non generano quell'errore.

    Per una moltiplicazione, il numero di elementi da allocare (almeno) e' dato dalle cifre del primo numero piu' le cifre del secondo numero ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26
    quindi

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

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se scrivi cosi', mi spieghi a cosa ti serve la prima riga?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26
    per quello ho messo n+n ma non va bene?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Misciu87
    per quello ho messo n+n ma non va bene?
    n+n puo' andare bene (anche se sprechi qualche elemento perche' allochi un po' piu' di memoria del necessario)

    Scusa .... ma secondo te cosa fa la prima riga? Ovvero, che valore assume n?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.