[ lancha131 @ 21.01.2011. 21:28 ] @
#include <stdio.h> #include <stdlib.h> #include <string.h> #define X(V,L,I) ( ((I)<(L)) ? (V[(L)-(I)-1]-'0') : 0) #define MIN(A,B) ( ((A)<(B)) ? (A) : (B) ) char *longmult(const char *a, const char *b) { int n, m, T; char *r = NULL; int i, j, k; int *C, *R; n = strlen(a); m = strlen(b); T = n+m+2; r = malloc(T+1); R = malloc(T*sizeof(int)); C = malloc((n+1)*(m+1)*sizeof(int)); memset(r, '0', T); memset(C, 0, (n+1)*(m+1)*sizeof(int)); r[T] = 0; for(i=0; i<(m+1); i++) { C[i*(n+1)] = (X(b,m,i) * X(a,n,0)); for(j=1; j<(n+1); j++) { C[i*(n+1)+j] = (X(b,m,i) * X(a,n,j) + C[i*(n+1)+j-1] / 10); } } for(k=0; k < T; k++) { R[k] = 0; for(j=0; j < MIN(k,m+1) ; j++) { i = k-j-1; if ( (i>n) || (i<0) ) { continue; } R[k] += (C[j*(n+1)+i]%10); } R[k] += ((k-1)<0 ) ? 0 : (R[k-1]/10); } for(k=T; k>0; k--) r[k-1] = R[T-k+1]%10 + '0'; free(C); free(R); return r; } int main() { char *result = NULL; char s[100],s1[40],s2[40],prvi[3][40]; char *res; int lz,br=0; result = strtok(gets(s)," "); while( result != NULL ) { strcpy(prvi[br++],result); result = strtok (NULL, " "); } res = longmult(prvi[1],prvi[2]); for(lz=0; (lz < strlen(res)) && (res[lz]=='0') ;lz++) ; printf("%s\n",res); free(res); return 0; } Zasto mi ovaj kod izbacuje svaki put kad kompajliram razlicitu vrednost.....ako hocu da pomnozim 8*8 izbaci mi broj ovog formata ***64 ,gde su ove tri zvezdice svaki put drugi broj...o cemu se ovde radi,malo imam iskustva sa dinamickim nizom...pls help... |