求大神, 怎么不对

P1035 [NOIP2002 普及组] 级数求和

Liyes_ @ 2016-04-05 19:14:19

#include<stdio.h>
#include<stdlib.h>
int mian()
{
    double Sn,a,i;
    scanf("%lf",&a);
    Sn=0;
    for(i=1;i++;i<100000)
    {
        Sn+=Sn+1/i;
        if(Sn>=a)
        break;
    }
    printf("%lf",Sn);
    return 0;
}

by kkksc03 @ 2016-04-05 21:37:02

@noip丿灬少帥丨你真的认为答案一定小于100000?


by cn_lemon @ 2016-07-27 10:28:57

咳咳,int mian是什么


by cn_lemon @ 2016-07-27 10:29:52

而且i最好定义int


by Aimyhtixela @ 2016-07-30 13:51:13

其实也不是什么i最好定义int,定义成double 也可以

但是建议用 long long

我就是用long long 过的

看看我的代码:

#include <iostream>
using namespace std;
int main(){
    double s=0;
    int k;
    long long i;
    cin>>k;
    const long long Guess_max=999999999999999;
    for (i=1;i<=Guess_max;++i){
        s=s+1.0/i;
        if (s>k) break;
    }
    cout<<i<<endl;
    return 0;
}
//耗时9秒,如果想耗时少一点的话,建议用while
//看看我的while 版:
 #include <iostream>
using namespace std;
int main(){
    int k,i=0;
    double s=0;
    cin>>k;
    while (s<=k){
        ++i;
        s+=1.0/i;
    }
    cout<<i<<endl;
    return 0;
}

by Aimyhtixela @ 2016-07-30 14:02:41

况且它让你输入的也因该是i 呀,

你还可以看看它的样本,

输入1 ,应该是2,

你得到的数字是1.33333,明显打印的方向就不对,还有,你知道+=是什么意思吗,你那个Sn+=Sn+1/i;,明显重复了,

顺便说一下,那个a+=b就是a=a+b,你那个Sn+=Sn+1/i,就变成了Sn=Sn+Sn+1/i;

你那个循环的格式也错了,第2个和第3个反了

//修改后的你的代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    double Sn,a,i;
    scanf("%lf",&a);
    Sn=0;
    for(i=1;i<9999999;++i)
    {
        Sn+=1.0/i;
        if(Sn>a)
        break;
    }
    printf("%d",(int)i);//也可以用上头文件iomanip,在setprecision(0)<<fixed;2333 不过貌似你是C党,那你就用强转吧 
    return 0;
}

by ChthollyMeow @ 2020-05-31 18:10:30

@翼德天尊


by 翼德天尊 @ 2020-05-31 18:11:08

@_珂朵莉 。。。你跳的有点快啊……


|