标题:求助,新手长期提问
只看楼主
Sherryeol
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-10-31
结帖率:100%
已结贴  问题点数:20 回复次数:11 
求助,新手长期提问
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
    long f=1;
    double sum=0;
    for(int i=1;i<=30;i++)
    {
        for(int j=1;j<=i;j++)
        {
            f=f*j;
        }
        sum=sum+f;
        f=1;
    }
    printf("%.2e",sum);
    return 0;
}
请大神帮忙看是哪里的问题 运行没错误 就是答案跟Online Judge不一样.....
OJ原题:求1+2!+3!+4!+…+30!。

科学计数法,保留两位小数。
提示:double定义,%.2e输出


不要用很复杂的东西我不懂(捂脸) 大一新生 一窍不通
谢谢各位大神!!!
搜索更多相关主题的帖子: include double return Online 
2016-10-31 17:13
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:5 
#include<iostream>
 #include<cstdio>
 #include<cmath>
 using namespace std;
 int main()
 {
     long f=1;
     double sum=0;
     for(int i=1;i<=30;i++)
     {
         for(int j=1;j<=i;j++)
         {
             f=f*j;
         }
         sum=sum+f;
         f=1;
     }
     printf("%.2e",sum);  //printf("%.2lf",sum);   sum是double类型的
     return 0;
 }

早知做人那么辛苦!  当初不应该下凡
2016-10-31 17:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
30! 能用 long 表示吗?
2016-11-01 08:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    double sum = 0;

    double f = 1;
    for( double i=1, f=1; i<=30; ++i )
    {
        f *= i;
        sum += f;
    }

    printf("%.2e\n",sum); // 2.74e+32
    return 0;
}
2016-11-01 09:12
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:11
帖 子:126
专家分:244
注 册:2016-8-22
得分:5 
先说说楼主的问题,再说二楼的问题:


楼主的问题主要在于%.2e输出的困惑, %.2e --- 按指数方式输出小数点后保留两位,另外,楼主编译过程中,对%.2e输出不是很了解的时候为什么不用%lf输出进行验证,看看你的算法逻辑是否正确,能不能达到预想的目的,实现算法特定的功能,你的算法就是错的,可以变着用不同的数字进行验证,这一点,楼主并没有做



再谈谈二楼的问题,二楼的同志,你同样没有进行算法的正确性验证,即便你因为sum的类型,提出了用%.2lf输出,但你要注意,楼主的问题中要求用%.2e输出,你不够细心,同时,没有去探究楼主的逻辑是否正确,算法能否实现特定的功能,这一点上你不够严谨





程序代码:
#include "stdafx.h"
#include<stdlib.h>
#include<cstdio>
#include<cmath>
int main()
{
   // long f=1;        //整个过程这个变量用不到
    double sum=1;
    for(int i=1;i<=9;i++)
    {
        sum=sum*i;        //建议楼主换一个变量名,用sum做变量名,不利于代码的可读性
    }
    printf("%.2e\n",sum);
    printf("%lf",sum);         //用来验证你的sum结果是否正确,验证用%lf输出,更直观
    system("pause");
    return 0;
}



最后,我给你们附上10以内阶乘的结果

以下列出1至10的阶乘。

1!=1,
2!=2,
3!=6,
4!=24,
5!=120,
6!=720,
7!=5040,
8!=40320
9!=362880
10!=3628800
另外,0的阶乘是1,楼主自己在代码里面加一条if条件,判断如果是0,直接判定阶乘是1,建议楼主试试,让用户输入一个整数,然后去求这个整数的阶乘

[此贴子已经被作者于2016-11-1 09:33编辑过]


对待编程,要像对待情人一样
2016-11-01 09:23
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:11
帖 子:126
专家分:244
注 册:2016-8-22
得分:0 
回复 3楼 rjsp
你的算法逻辑也不能实现楼主求阶乘的功能

对待编程,要像对待情人一样
2016-11-01 09:31
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 
回复 5楼 鸿蒙之灵
是的是的,的确不够严谨,刚开始学习C语言二两月,基础不扎实,接触的东西少.我会不断努力的.
谢谢!

早知做人那么辛苦!  当初不应该下凡
2016-11-01 11:56
仰望星空的
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:50
专家分:248
注 册:2015-9-28
得分:0 
回复 5楼 鸿蒙之灵
您讲的很详细,不过我看楼主的题目不是需要求阶乘的代数和嘛,是不是还需要将以内的阶乘数相加啊!
2016-11-01 13:19
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:11
帖 子:126
专家分:244
注 册:2016-8-22
得分:0 
回复 8楼 仰望星空的
嗯,对的,我没有看清题目,抱歉,确实是要求阶乘的代数和,实在抱歉,我按照求阶乘处理了,我的失误,炎天和rjsp,还有楼主的逻辑上都没有错误,是我疏忽了,抱歉

[此贴子已经被作者于2016-11-1 13:47编辑过]


对待编程,要像对待情人一样
2016-11-01 13:29
starlz
Rank: 2
等 级:论坛游民
帖 子:15
专家分:27
注 册:2016-10-22
得分:0 
#include<iostream>
using namespace std;
int main()
{
    int n=0, i, j = 1;
    for (i = 1; i != 30; ++i)
    {
        j *= i; n+= j;}
    cout << n;
    return 0;
}
是不是这个意思呢?
2016-11-01 15:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-470523-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.368895 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved