如图
#include <stdio.h>
void main() {
int fac(int num);
int n = 1;
int num;
for (num = 0; num <= 20; ++num) {
printf("%d! = %d\n", num, fac(num));
}
}
int fac(int num) {
register int n = 1, i; //寄存器变量
for (i = 1; i < num; i++) {
n = n * i;
}
return n;
}
fac里for循环应该是i<=num
13! 就超 int 型数值范围了,修改如下,供参考:
#include <stdio.h>
void main() {
__int64 fac(int num);
int n = 1;
int num;
for (num = 0; num <= 20; ++num) {
printf("%3d! = %I64d\n", num, fac(num));
}
}
__int64 fac(int num) {
register __int64 n = 1, i; //寄存器变量
for (i = 1; i <= num; i++) {
n = n * i;
}
return n;
}
//2^31 = 2,147,483,648