怎么解决for是个无限循环

P1035 [NOIP2002 普及组] 级数求和

小亮 @ 2018-08-03 18:18:51

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int main()
{
 int n=1,k;
    long long s=0;
    cin>>k;
  for(;s<=k;n++) s=s+1/n;
    cout<<n;
}

by ComeOver· @ 2018-08-03 18:29:45

你加了n呀

@w2447544837


by aiyougege @ 2018-08-03 18:29:52

首先你得保证s是一个浮点数, 1/n也是个浮点数

你这样写s=s+1/n前后s的值根本就不发生变化


by aiyougege @ 2018-08-03 18:30:30

@w2447544837 首先你得保证s是一个浮点数, 1/n也是个浮点数

你这样写s=s+1/n前后s的值根本就不发生变化


by Little_Ming @ 2018-08-03 18:44:34

s=s+ 1 /n;

在c++中,当/两边都是整数时,进行的是整数除法(向下取整),1/n = 0

解决方法:

s=s+1.0/n //把1变为实数类型,进行实数除法

by _FILARET_ @ 2018-08-03 19:24:49

其实

double();

也可以(我不是特别建议用float因为精度没double高)


by intel_core @ 2018-08-03 20:45:11

long double @deadpool123 c++11


by _FILARET_ @ 2018-08-03 21:26:08

@dongyancheng long double 也可以只不过这道题用不到


|