16/07/08 15:29
topolona
Ho provato a implementare la funzione per l'addizione per poi usarla iterativamente per la moltiplicazione
#include <stdio.h> #include <stdlib.h> #include<time.h> int getlength(char *list) { int i=0; while(list[i]!='Ho provato a implementare la funzione per l'addizione per poi usarla iterativamente per la moltiplicazione#include <stdio.h> #include <stdlib.h> #include<time.h> int getlength(char *list) { int i=0; while(list[i]!='{parsed_message}') 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; }') 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; }
aaa