代码如下,不知道哪里WA了

P1035 [NOIP2002 普及组] 级数求和

qq1141120715 @ 2017-11-16 20:54:05

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int k,n=0;
    double sum = 0.0000;
    scanf("%d",&k);
    for(n = 1;sum<=k;n++)
    {
        sum = sum +(1.0/n);
    }
    printf("%d\n",n);
    return 0;
}

by stray_233 @ 2017-11-16 21:02:35

多了一个吧


by stray_233 @ 2017-11-16 21:05:20

#include<iostream>
using namespace std;
double tot;
int i,k;
int main(){
    cin>>k;
    tot=0;
    for(i=1;tot<=k;i++)
        tot+=1.0/i;    
    cout<<i-1<<endl;//有一个是1.0/1所以要减一
    return 0;
}

by Bartholomew @ 2017-11-17 10:51:21

@qq1141120715 @stray_233

首先 , 你输出时多了一个 1 ,这是因为你的循环设置的不对! 你是看看先在是不是小,然后再加上 1/i ,但是正确的是改反过来,还有就是 你的double 类型转换的问题, 不然还是int 类型!

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int k,n=0;
    double sum = 0.0000;
    scanf("%d",&k);
    for(n = 1;sum<=(double)k;n++)
    {
        sum = sum +(1.0/(double)n);
    }
    printf("%d\n",n-1);
    return 0;
}

by stray_233 @ 2017-11-17 19:45:21

@Bartholomew

不是自动就可以转化的吗?


by stray_233 @ 2017-11-17 19:45:50

@Bartholomew

你这是c语言?


by Bartholomew @ 2017-11-17 20:53:19

这是C++(汗...)

有时候需要强制进制转换的! 可能现在不需要,但是之后又必要的!


by Bartholomew @ 2017-11-17 20:55:31

@stray_233 只是这样比较的保险!


|