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

    [C] Moltiplicazione interi lunghezza arbitraria

    Il codice fa la moltiplicazione solo se gli inserisco nei numeri composta da una cifra solo per esempio 3*2, 2*2 ma non funziona con numeri di + cifre. Qualcuno può aiutarmi?

    codice:
    #include <stdio.h>
    #include <stdlib.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))+1;
    	int *res=(int *)malloc((n+1)*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 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;
    	}
    	num1=loadlist((char *)argv[1]);
    	num2=loadlist((char *)argv[2]);
    	start=clock();
    	res=add(num1,num2);
    	end=clock();
        printf("%g\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
    	print(res,0);
    	return 0;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26
    C'è qualcuno che può darmi un aiuto?

  3. #3
    ma il programma non somma due numeri interi ?

    Cosa non va ? Fai un esempio di imput e output perchè a me funziona.
    ciao
    sergio

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26
    io devo fare la moltiplicazione a partire da quello ho modificato questa riga

    tmp=(num1[i]+num2[i]+rest);
    cosi:
    tmp=(num1[i]*num2[i]+rest);

    ma se faccio moltiplicazioni con interi composti da una cifra funziona tipo 2*4,3*5,4*9 ecc. se invece moltiplico interi di più cifre tipo 20*14, 51*63, 100*36, 365*74 ecc non funziona sai aiutarmi?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26
    mondobimbi puoi aiutarmi? o qualcun altro

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Scusa ... ma se ho capito bene, la funzione e' l'addizione di piu' cifre ... non basta metterci un * per modificarla in moltiplicazione ... devi rivedere l'algoritmo e scrivere una NUOVA funzione per la moltiplicazione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    26
    non puoi aiutarmi a modificarla perche io ho fatto quella dell'addizione perche mi sembrava più facile, cosi poi potevo basarmi su quello per fare la moltiplicazione ma non riesco a modificarlo..

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Se vuoi basarti sull'addizione per effettuare la moltiplicazione non devi cambiare quella dell'addizione, ma la devi usare iterativamente...

    2 * 3 = 2 + 2 + 2

    quindi, in termini di pseudo-codice:
    codice:
    func moltiplica(int a, int b) {
       int iterator = 0;
       int result = 0;
       for(iterator = 0; iterator < b; iterator++) {
          result = somma(result, a);
       }
       return result;
    }
    Se intendi scriverne un'altra, l'algoritmo è ovviamente diverso e va ripensato...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di LexLex
    Registrato dal
    May 2008
    Messaggi
    56
    Originariamente inviato da Misciu87
    non puoi aiutarmi a modificarla perche io ho fatto quella dell'addizione perche mi sembrava più facile, cosi poi potevo basarmi su quello per fare la moltiplicazione ma non riesco a modificarlo..
    Ma sei proprio sicuro che l'hai scritta tu ?? :master:
    "Dai Diamanti non nasce niente, dal letame nascono i fiori.. " F.De Andrè

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da LexLex
    Ma sei proprio sicuro che l'hai scritta tu ?? :master:
    Evidentemente no ...
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.