[ 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...
[ abitbp6 @ 22.01.2011. 02:28 ] @
Zbog ovoga:

for(k=T; k>0; k--) r[k-1] = R[T-k+1]%10 + '0';



A ovo ti ne radi nista:

for(lz=0; (lz < strlen(res)) && (res[lz]=='0') ;lz++) ;
[ lancha131 @ 22.01.2011. 13:41 ] @
mozes li mi reci kako da ispravim ovu liniju koda kako bi ovo radilo....