c++求改错

P1035 [NOIP2002 普及组] 级数求和

eydz_mfj @ 2017-08-22 11:19:25

#include <iostream>
using namespace std;
int main()
{
    float n,s;
    int k;
    cin>>k;
    for(n=1;;n++)
    {
        s+=1/n;
        if(s>k)
        {
        cout<<n<<endl;
        return 0;
        }
    }
    return 0;
}
//谢谢大佬们

by Night_Aurora @ 2017-08-22 11:22:38

s没有赋初值

应该 float n,s=0;


by Night_Aurora @ 2017-08-22 11:23:39

还有n应该用int

顺便把s+=1/n改成s+=1.0/n


by eydz_mfj @ 2017-08-22 11:26:37

@ Night_Aurora

谢谢,谢谢。

不太明白如果n用int那1/n不会出事儿吗


by Night_Aurora @ 2017-08-22 11:27:48

两个int相运算结果强制转换成int

所以要改成1.0/n来保证是浮点数运算


by eydz_mfj @ 2017-08-22 11:28:29

okok懂啦

谢谢!


by eydz_mfj @ 2017-08-22 11:29:41

#include <iostream>
using namespace std;
int main()
{
    float s=0;
    int k,n;
    cin>>k;
    for(n=1;;n++)
    {
        s+=1.0/n;
        if(s>k)
        {
        cout<<n<<endl;
        return 0;
        }
    }
    return 0;
}
//改了一下子

好像还是炸了 60分 第三组和第五组测试数据没过


by Night_Aurora @ 2017-08-22 11:30:10

你拿60分估计是精度的原因

把float改成double吧

以后习惯用double别用floa


by eydz_mfj @ 2017-08-22 11:32:30

好,好


by eydz_mfj @ 2017-08-22 11:40:59

过了过了

谢谢谢谢


by 我是真的牛逼 @ 2017-08-22 11:56:26

#include<iostream>
using namespace std;
int main()
{
    int k,n=0;
    double sn=0;
    cin>>k;
    while(k>=1&&k<=15&&k>=sn)
    {
        n++;
        sn+=1.0/n;
    }
    cout<<n;
    return 0;
}

|