Pagini recente » Cod sursa (job #1587688) | Cod sursa (job #1026181) | Cod sursa (job #1791035) | Cod sursa (job #3295244) | Cod sursa (job #2453198)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
void save_tens(unsigned long *p, unsigned long* n)
{
while ((*p % 10 == 0)&&(*n!=0))
{
*p = *p / 10;
*n = *n - 1;
}
}
unsigned long quick_pow10(int n)
{
static int pow10[10] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
return pow10[n];
}
unsigned long len(unsigned long x) {
if (x >= 1000000000) return 10;
if (x >= 100000000) return 9;
if (x >= 10000000) return 8;
if (x >= 1000000) return 7;
if (x >= 100000) return 6;
if (x >= 10000) return 5;
if (x >= 1000) return 4;
if (x >= 100) return 3;
if (x >= 10) return 2;
return 1;
}
unsigned long min(unsigned long a, unsigned long b)
{
if (a < b)
return a;
return b;
}
int main()
{
FILE* f = fopen("fact.in", "rt");
unsigned long n, p = 1, i = 2;
fscanf(f, "%lu", &n);
while (n)
{
p = (p * i) % quick_pow10(min((len(i)+1), 10000));
save_tens(&p, &n);
printf("%d %d \n", p, n);
i++;
}
f = fopen("fact.out", "wt");
fprintf(f, "%lu \n", i-1);
fflush(stdout);
fclose(f);
return 0;
}