Ahi va la solucion:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char* argv[])
{
unsigned long fact1=1,fact2=1,i=1;
char num1[50],num2[50];
int difCifras; /*no creo que un unsigned long tenga tantas cifras :P*/
do{
printf("Introduce la diferencia de cifras entre dos factoriales consecutivos: ");
fflush(stdin);
scanf("%d",&difCifras);
}while(difCifras<0);
do{
fact1*=i;
fact2=fact1*(i+1);
sprintf(num1,"%lu",fact1);
sprintf(num2,"%lu",fact2);
i++;
if(i==13) /*13! excede la capacidad de un usigned long*/
break;
}while(strlen(num2)-strlen(num1) < difCifras);
i--;
if(i!=12)
printf("%d! y %d! se diferencian en %d cifras\n"
"%d!=%lu\n"
"%d!=%lu\n",i,i+1,difCifras,i,fact1,i+1,fact2);
else
printf("No se dispone de tanta capacidad de calculo.\n");
system("PAUSE");
return 0;
}
Espero que sirva de algo!!
Un saludo!!!!!