冰清玉洁丸 发表于 2020-9-20 21:37:29

作业

求 1 + 1 * 2 + 1 * 2 * 3 + ... + 1 * 2 * 3 * ... * n 的数
代码应该没问题
但是输入2的时候应该计算的是1 + 1 * 2,结果是3
可是终端上结果是-2144696064

代码如下:#include <bits/stdc++.h>
using namespace std;

int factorial(int);

int main()
{
        int n,sum = 0;
        cout<<"Input a number: ";
        cin>>n;
       
        cout<<"1+1*2+1*2*3+...+1*2*3*...*n = ";
       
        for (int i = 1;i <= n;i++)
        {
                for (int j = 1;j <= i;j++)
                {
                        sum += factorial(i);
                }
        }
       
        cout<<sum;
       
        return 0;
}

int factorial(int num)
{
        int last;
       
        num++;
        for (int i = 2;i <= num;i++)
        {
                last = i - 1;
               
                num += last * i;
        }
       
        return num;
}
这里 n 就是题目里的n
sum是得数
函数factorial是在计算时做一个阶乘

大佬帮忙看一下代码哪里有错!!!

sunrise085 发表于 2020-9-20 22:02:43

本帖最后由 sunrise085 于 2020-9-21 08:57 编辑

第一、本质是对多个阶乘求和,求和运算为什么用双层循环?
第二、你的阶乘是怎么算的,我实在是看不懂。。num作为循环结束条件,而num一直在变化,阶乘为什么一直在相加?
#include <bits/stdc++.h>
using namespace std;

int factorial(int);

int main()
{
    int n,sum = 0;
    cout<<"Input a number: ";
    cin>>n;
   
    cout<<"1+1*2+1*2*3+...+1*2*3*...*n = ";
   
    for (int i = 1;i <= n;i++)
    {
      sum += factorial(i);
    }
   
    cout<<sum;
   
    return 0;
}

int factorial(int num)
{
    int result=1;
    for (int i = 1;i <= num;i++)
    {
      result *= i;
    }
      
    return result;
}

若不是为了使用阶乘函数的话,可以更简单一些
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n,sum = 0,temp=1;
    cout<<"Input a number: ";
    cin>>n;
   
    cout<<"1+1*2+1*2*3+...+1*2*3*...*n = ";
    for (int i = 1;i <= n;i++)
    {
      temp*=i;
      sum += temp;
    }
    cout<<sum;
    return 0;
}

乐乐学编程 发表于 2020-9-23 22:14:27

冰清玉洁?我还是老少皆宜呢

风过无痕1989 发表于 2020-9-23 23:02:23

我不知道你的头文件写的是什么鸟,

我VC++6.0直接报错:fatal error C1083: Cannot open include file: 'bits/stdc++.h': No such file or directory (中文意思是:不能打开所包含的文件:'bits/stdc++.h':没有这个文件或文件包);

我用DEV_C++: 'bits/stdc++.h': No such file or directory    compilation terminated.

wsq999 发表于 2020-9-25 17:21:12

风过无痕1989 发表于 2020-9-23 23:02
我不知道你的头文件写的是什么鸟,

我VC++6.0直接报错:fatal error C1083: Cannot open include file:...

查看了下资料,#include <bits/stdc++.h>类似于一个万能的头文件,加入这个头文件可以避免忘记加很多其他的头文件导致代码运行不起来,一个头文件可以接解决所有问题,比赛用的比较多。我用的dev-c++也会报你上面的那个错误,那是因为安装软件的时候这个头文件没有加入进去,至于怎么加,我还在百度~

风过无痕1989 发表于 2020-9-25 17:44:03

wsq999 发表于 2020-9-25 17:21
查看了下资料,#include 类似于一个万能的头文件,加入这个头文件可以避免忘记加很多其他的头文件导致代 ...

那好,等你的消息

405794672 发表于 2020-9-25 20:04:26

首先你把阶乘函数循环了两次。其次,你的阶乘函数,好复杂,都看不懂在干什么
一个数进去不应该直接从1乘到它吗?
为啥首先加了个1。再从2号开始到加过1后的它?
再用一个变量从1开始递增。然后,这个加过1的数再加从2相乘?好麻烦!
先改这个:
int factorial (int num)
{
   int i;
   for(i=num-1;i>0;i--)
   {
          num*=i;
      }
    return num;
}

你要算1+1*2*……,可以如下:
for(i=1;i<=n;i++)
{
   sum+=factorial(i);
}
页: [1]
查看完整版本: 作业