注册 登录
编程论坛 C++教室

求助,新手长期提问

Sherryeol 发布于 2016-10-31 17:13, 3027 次点击
#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输出


不要用很复杂的东西我不懂(捂脸) 大一新生 一窍不通
谢谢各位大神!!!
11 回复
#2
炎天2016-10-31 17:48
#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;
 }
#3
rjsp2016-11-01 08:59
30! 能用 long 表示吗?
#4
rjsp2016-11-01 09:12
程序代码:
#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;
}
#5
鸿蒙之灵2016-11-01 09:23
先说说楼主的问题,再说二楼的问题:


楼主的问题主要在于%.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编辑过]

#6
鸿蒙之灵2016-11-01 09:31
回复 3楼 rjsp
你的算法逻辑也不能实现楼主求阶乘的功能
#7
炎天2016-11-01 11:56
回复 5楼 鸿蒙之灵
是的是的,的确不够严谨,刚开始学习C语言二两月,基础不扎实,接触的东西少.我会不断努力的.
谢谢!
#8
仰望星空的2016-11-01 13:19
回复 5楼 鸿蒙之灵
您讲的很详细,不过我看楼主的题目不是需要求阶乘的代数和嘛,是不是还需要将以内的阶乘数相加啊!
#9
鸿蒙之灵2016-11-01 13:29
回复 8楼 仰望星空的
嗯,对的,我没有看清题目,抱歉,确实是要求阶乘的代数和,实在抱歉,我按照求阶乘处理了,我的失误,炎天和rjsp,还有楼主的逻辑上都没有错误,是我疏忽了,抱歉

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

#10
starlz2016-11-01 15:14
#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;
}
是不是这个意思呢?
#11
StadyC2016-11-01 17:59
30!,骚年,这已经爆了
#12
Sherryeol2016-11-06 17:10
回复 4楼 rjsp
谢谢您!
1