/* Desenvolvido por Adriano Rocha Pereira */ /* e-mail: maxprimenumber@gmail.com */ /* Home Page: http://br.geocities.com/arpmaxprimenumber */ #include #define MAX 506 int le_vetor ( int a[], int digito ); void prod ( int vet1[], int digv1, int d, int digv2, int subsoma[][MAX], int quant[] ); void maior ( int vetor[], int w, int *maxmaior ); void resultado ( int somavetor[][MAX], int h, int g, int b[], int *arp ); int main () { int r, u, t, i, d, adic, elemaior, maxmaior, maravearp, arp; int quant[MAX], result[MAX]; int l, c, subsoma[MAX][MAX]; int digito, num1[MAX], dig1, num2[MAX], dig2; printf("\n"); printf(" 2-3-5-7-11-13-17-19-23-29-31 \n"); printf(" | | \n"); printf(" 97 D e v e l o p e d 37 \n"); printf(" | by | \n"); printf(" 89 AstroRei 41 \n"); printf(" | | \n"); printf(" 83-79-73-71-67-61-59-53-47-43 \n"); printf("\n"); printf("\n"); printf(" Super Multiplicadora \n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); while (1) { printf("\n"); printf("Quantos digitos tera o numero1: "); scanf("%d", &digito); if ( digito > (((MAX-(MAX%2))/2)-3) ) { printf("\n"); printf("!!*** Valor Invalido ***!! O numero de digitos deve ser menor ou igual a %d. \n", (((MAX-(MAX%2))/2)-3)); return 0; } else { dig1=digito; printf("\n"); printf("Quais os digitos do numero1 \n"); printf("\n"); r=le_vetor ( num1, dig1 ); if ( r ) { printf("\n"); printf("!!*** Valor Invalido ***!! Digite apenas um unico algarismo entre 0 a 9. \n"); return 0; } else { printf("\n"); printf(" Numero1 = "); for ( i = (dig1-1) ; i >= 0 ; i-- ) printf("%d ", num1[i]); printf("\n"); printf("\n"); printf("Quantos digitos tera o numero2: "); scanf("%d", &digito); if ( digito > (((MAX-(MAX%2))/2)-3) ) { printf("\n"); printf("!!*** Valor Invalido ***!! O numero de digitos deve ser menor ou igual a %d. \n", (((MAX-(MAX%2))/2)-3)); return 0; } else { dig2=digito; printf("\n"); printf("Quais os digitos do numero2 \n"); printf("\n"); r=le_vetor ( num2, dig2 ); if ( r ) { printf("\n"); printf("!!*** Valor Invalido ***!! Digite apenas um unico algarismo entre 0 a 9. \n"); return 0; } else { printf("\n"); printf(" Numero1 = "); for ( i = (dig1-1) ; i >= 0 ; i-- ) printf("%d ", num1[i]); printf("\n"); printf(" Numero2 = "); for ( i = (dig2-1) ; i >= 0 ; i-- ) printf("%d ", num2[i]); printf("\n"); for ( i = 0 ; i < dig2 ; i++ ) { d=num2[i]; prod ( num1, dig1, d, i, subsoma, quant ); } maior ( quant, dig2, &maxmaior ); elemaior=maxmaior; for ( u = 0 ; u < dig2 ; u++ ) for ( t = quant[u] ; t < elemaior ; t++ ) subsoma[u][t]=0; printf("\n"); printf("--------------------------------------------------------------------------------"); printf(" "); for ( c = (dig1-1) ; c >= 0 ; c-- ) printf("%d ", num1[c]); printf("\n"); printf(" x "); for ( c = (dig2-1) ; c >= 0 ; c-- ) printf("%d ", num2[c]); printf("\n"); printf("--------------------------------------------------------------------------------"); printf("\n"); for ( l = 0 ; l < dig2 ; l++ ) { printf(" "); for ( c = (elemaior-1) ; c >= 0 ; c-- ) printf("%d ", subsoma[l][c]); printf("\n"); } printf(" + \n"); printf("--------------------------------------------------------------------------------"); resultado ( subsoma, elemaior, dig2, result, &arp ); maravearp=arp; if ( maravearp == elemaior ) { printf(" "); for ( i = (maravearp-1) ; i >= 0 ; i-- ) printf("%d ", result[i]); printf("\n"); printf("--------------------------------------------------------------------------------"); } else { printf(" "); for ( i = (maravearp-1) ; i >= 0 ; i-- ) printf("%d ", result[i]); printf("\n"); printf("--------------------------------------------------------------------------------"); } } } } } } return 0; } int le_vetor ( int a[], int digito ) { int i, k; k=0; for ( i = (digito-1) ; i >= 0 ; i-- ) { scanf("%d", &a[i]); if ( (a[i]/10) != 0 ) { k=1; i=-1; } } if ( k ) return 1; else return 0; } void prod ( int vet1[], int digv1, int d, int digv2, int subsoma[][MAX], int quant[] ) { int k, c, adic; adic=0; for ( c = digv2 ; c < (digv1+digv2) ; c++ ) if ( ( d*vet1[c-digv2]+adic ) < 10 ) { subsoma[digv2][c]=d*vet1[c-digv2]+adic; adic=0; if ( c == (digv1+digv2-1) ) quant[digv2]=digv1+digv2; } else { subsoma[digv2][c]=(d*vet1[c-digv2]+adic)%10; if ( c == (digv1+digv2-1) ) { quant[digv2]=digv1+digv2+1; subsoma[digv2][digv1+digv2]=(d*vet1[c-digv2]+adic)/10; } adic=(d*vet1[c-digv2]+adic)/10; } for ( k = 0 ; k < digv2 ; k++ ) subsoma[digv2][k]=0; } void maior ( int vetor[], int w, int *maxmaior ) { int i, maximo; maximo=vetor[0]; for ( i = 1 ; i < w ; i++ ) if ( vetor[i] > maximo ) maximo=vetor[i]; *maxmaior=maximo; } void resultado ( int somavetor[][MAX], int h, int g, int b[], int *arp ) { int i, j, adic, soma, tarpf; adic=0; for ( i = 0 ; i < h ; i++ ) { soma=0; for ( j = 0 ; j < g ; j++ ) { soma=somavetor[j][i]+soma+adic; adic=0; } if ( soma < 10 ) { b[i]=soma; adic=0; if ( i == (h-1) ) tarpf=h; } else { b[i]=soma%10; adic=soma/10; if ( i == (h-1) ) { tarpf=h+1; b[i+1]=adic; } } } *arp=tarpf; }