求1*2*......*100
#include<stdio.h>int main()
{
int a,i;
a=1;
i=2;
for(;i<=100;i++)
{
a=a*i;
}
printf("1*2*......*100=%d",a);
return 0;
}
运行结果为什么是0? 你这个结果超过了 int 的范围
阶乘的增长是十分可怕的
可以学一下高精度 本帖最后由 jackz007 于 2022-10-3 20:12 编辑
#include <stdio.h>
int main(void)
{
unsigned i , n ;
unsigned long long j , m ;
for(i = n = 1 ;0xffffffff / n > i ; i ++) n *= i ;
printf("i = %u , n = %u\n" , i - 1 , n) ;
for(j = m = 1 ;0xffffffffffffffff / m > j ; j ++) m *= j ;
printf("j = %I64u , m = %I64u\n" , j - 1 , m) ;
}
编译、运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
i = 12 , n = 479001600
j = 20 , m = 2432902008176640000
D:\\C>
这个代码告诉我们,对于 32 位的 int,能计算的极限阶乘数是 12,对于 64 位的 long long,能计算的极限阶乘数是 20,所以,通过正常手段是根本无法计算出 100 的阶乘的。即便是计算出来,也是溢出以后的数值,和正确答案的差距那是十万八千里!!!
页:
[1]