zyxmm 发表于 2022-10-3 19:41:08

求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?

柿子饼同学 发表于 2022-10-3 19:47:45

你这个结果超过了 int 的范围
阶乘的增长是十分可怕的
可以学一下高精度

jackz007 发表于 2022-10-3 20:09:27

本帖最后由 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]
查看完整版本: 求1*2*......*100