c,不知道哪里有问题。

P1035 [NOIP2002 普及组] 级数求和

老冲怪 @ 2020-01-21 15:05:41

先上代码

#include <stdio.h>

int main(){
    double k;//输入的k值 
    scanf("%lf",&k);
    double n=0;//输出 
    double sn=0;
    for(n=0;sn<=k;){
        n+=1;
        sn=sn+1.0/n;
    }
    printf("%f",n);
    return 0;
}

首先,在for循环中第二个分号后用n++和++n之后通过调试n都没有变化,导致sn的值都为inf。不知道什么原因。再者是提交之后为0分。不知道什么原因。


by ztxtjz @ 2020-01-21 15:08:45

把n改为int


by ztxtjz @ 2020-01-21 15:11:44

#include <stdio.h>

int main(){
    double k;
    scanf("%lf",&k);
    int n; 
    double sn=0;
    for(n=0;sn<=k;){
        n++;
        sn=sn+1.0/n;
    }
    printf("%d",n);
    return 0;
}

可AC


by 老冲怪 @ 2020-01-21 15:45:04

@ztxtjz 我改了以后确实可以,但是我有两个疑问。

1,为什么我把n++改到for的括号内只会输出1呢?我输入任何一个数都会输出1.

2,为什么n用double定义就不行呢?


by ztxtjz @ 2020-01-21 22:28:36

@老冲怪 因为你第一次时候n=0,1/0有问题。第二个问题我也不是很了解


|