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
条件应为<=
,答案应为
by jzm0708 @ 2024-08-21 20:12:18
@liuzhikun 就是说,你的1是整数类型,用整数做除法小数部分会直接被阉割(例如5/2会得到2,但正确答案是2.5)
你只要改成sum+=(1.0/float(n));就行了
还有如果要用小数类型的话,个人觉得最好是用双精度(double),完全可以取代单精度(flont)
还一循环条件改为<=,因为是>k