新手求助,自己电脑上运行没问题,但是提交答案显示不接受

P1035 [NOIP2002 普及组] 级数求和

weiker @ 2023-03-05 20:05:09

#include<stdio.h>

double JiShu(double x)
{
    double S = 1;
    int i = 1;
    /*if (x == 1)
    {
        return 2;
    }*/
   while(i <= x)
   {
       S = S + (1.00 / i);
       i++;
   }
    return S;
}
int main(void)
{
    double n;
    scanf_s("%lf",&n);
    if (JiShu(n) > n)
    {
        printf("%0.4lf\n", JiShu(n));
    }
    else
    {
        printf("不成立\n");
    }
    return 0;
}

by zhaohanwen @ 2023-03-05 20:16:59

scanf_s("%lf",&n);
换成scanf("%lf",&n);

by zhaohanwen @ 2023-03-05 20:17:43

但是你这个代码有问题


by zhaohanwen @ 2023-03-05 20:18:14

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int k,g=1;
    double n=0.0;
    cin>>k;
    while(1)
    {
        n+=1.0/g;
        if(n>k)
        {
            break;
        }
        g++;
    }
    cout<<g<<endl;
    return 0;
}

by QCM4902 @ 2023-03-05 20:42:46

可能错就错在

 while(i <= x)//就是这个判定
   {
       S = S + (1.00 / i);
       i++;
   }

这里。

这儿的判定条件应当是S<=x

个人想法:不需要定义函数,直接写一个循环。

#include <stdio.h>
int main()
{
    double s=0.0,i=1.0;
    int k,n;
    scanf("%d",&k);
    for(i=1;i<=0x7FFFFFFF;i++)
    {
        s+=1/i;
        n++;
        if(s>k)
        {
            printf("%d",n);
            return 0;
        }
    }//精简的判定过程
}

(有可能是错的)


|