Aseeker 发表于 2019-11-15 23:32:37

C++ 阶乘

#include<stdio.h>
void main()
{
        int i,n,j;
        double Sn=0;
        printf("请输入n的值(0<n<100):");
        scanf("%d",&n);
        if(0<n<100)
        {
                for(i=1;0<i<=n;i++)
                {
                        for(j=1;j<=i;j++)
                        {Sn+=1.0/j;}
                }
        }
        printf("Sn=%lf",Sn);
}
为什么我输入数据后,卡住,无法显示结果

bin554385863 发表于 2019-11-15 23:41:15

if(0<n<100)
      {
                for(i=1;0<i<=n;i++)
                {
                        for(j=1;j<=i;j++)
                        {Sn+=1.0/j;}
                }
      }
      printf("Sn=%lf",Sn);
}

再回去好好看视频或者查资料,谁的if语句和for循环是你这样用的

阴阳神万物主 发表于 2019-11-15 23:56:21

我给你一个图,你说说为什么卡住。

解决办法,且不谈你的结果是否正确:


话说,你那真的是C++吗?
如果说是C++的话,编译会出问题呢,main 函数必须返回整数
'::main' must return 'int'
按照C 来编译才没报错呢。

jackz007 发表于 2019-11-16 00:26:01

本帖最后由 jackz007 于 2019-11-16 11:14 编辑

    楼主写的代码算法显然不对,下面是我写的代码,楼主可以参考:
#include<stdio.h>
int main(void)
{
      int i , n                                                      ;
      double Sn = 0                                                ;
      printf("请输入 n 的值 (1 - 99) : ")                            ;
      scanf("%d" , & n)                                              ;
      if(n > 0 && n < 100) {
                for(Sn = 1.0 , i = 0 ; i < n ; i ++) Sn = Sn * (i + 1) ;
                printf("%.0lf\n" , Sn)                                 ;
      }
      return 0                                                       ;
}

      编译运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
请输入 n 的值 (1 - 99) : 99
93326215443944096000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000

C:\Bin>python x.py
93326215443944152681699238856266700490715968264381621468592963895217599993229915
6089414639761565182862536979208272237582511852109168640000000000000000000000

C:\Bin>

          同样都是计算 99 的阶乘,前面是 C 的计算结果,后面是 Python 的计算结果。可以看出,前者计算误差很大,只有前 14 位是正确的。
页: [1]
查看完整版本: C++ 阶乘