这哪里错了,脑子大了?

P1035 [NOIP2002 普及组] 级数求和

liuzhikun @ 2024-08-21 19:34:25

#include <iostream>
using namespace std;
int main(void) {
    float sum=0;
    int n=1;
    int k;
    cin>>k;
    while(sum<k){       
        sum+=(1/float(n));
        n++;
    }   
    cout<<n;

    return 0;
}

by vistakuang @ 2024-08-21 19:40:59

循环条件应该是<=,因为是>k


by apzzzx @ 2024-08-21 19:43:12

#include<bits/stdc++.h>
using namespace std;
int main() {
    int k,n=0;
    cin>>k;
    for(double a=0;a<=k;n++,a+=1.0/n);
    cout<<n;
    return 0;
}

@liuzhikun 求关qwq


by 九杯咖啡 @ 2024-08-21 19:43:50

float 精度太低,while 条件应为<=,答案应为n-1


by jzm0708 @ 2024-08-21 20:12:18

@liuzhikun 就是说,你的1是整数类型,用整数做除法小数部分会直接被阉割(例如5/2会得到2,但正确答案是2.5)

你只要改成sum+=(1.0/float(n));就行了

还有如果要用小数类型的话,个人觉得最好是用双精度(double),完全可以取代单精度(flont)

还一循环条件改为<=,因为是>k


|