POJ_1003 Hangover

問題
カードを台に積み上げていく。
台からカードがはみでた部分の長さ(A)が与えられるので、その長さのはみ出しを
つくれる最小のカード枚数を出力せよ。
カードがn枚のとき、作れるはみ出しの長さLは次の式で求められる。
L = 1/2 + 1/3 + 1/4 + ... + 1/(n+1)
解法
カードの枚数を1から順に増やしていき、はみ出しの長さをそれぞれもとめ、
初めてAをこえたときの長さを出力すればいい。
誤差が怖いのでEPSつかってる。

#include <cstdio>
#include <algorithm>
using namespace std;

const double EPS = 0.0001;
int main(){
	double hangover;
	while(scanf("%lf", &hangover) && hangover > 0.01){
		int i = 1;
		double oh = 0.0;
		for(;; i++){
			oh += 1.0 / (double)(i + 1);
			if(hangover <= oh + EPS) break;
		}
		printf("%d card(s)\n", i);
	}
	return 0;
}