1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
// 优化后的计算正整数阶乘:
unsigned long int calc1(unsigned long int n)
{
// C语言中,register关键字的作用是建议编译器,尽可能地把变量存放在寄存器中,以加快其访问速度。
register unsigned long int fact0 = 1, fact1 = 1, fact2 = 1, fact3 = 1;
unsigned long int i = 1;
unsigned long int lp = n - n % 4;
// printf("lp: %lu\n", lp);
for (; i < lp; i += 4) {
fact0 *= i;
// printf("i: %lu\n", i);
fact1 *= (i + 1);
// printf("i: %lu\n", i+1);
fact2 *= (i + 2);
// printf("i: %lu\n", i+2);
fact3 *= (i + 3);
// printf("i: %lu\n", i+3);
}
// printf("iii: %lu\n", i);
// i++;
for (; i < n + 1; i++)
{
fact0 *= i;
// printf("i: %lu\n", i);
}
return fact0 * fact1 * fact2 * fact3;
}
|