/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone {
public static void main
(String[] args
) { //In this first call, no terms are used since none are greater
//than EPSILON which is 2.
System.
out.
printf("%.10f\n", addInverses
(2)) ; System.
out.
println("0.0000000000 is expected.") ; System.
out.
println("------------") ;
//In this second call, no terms are used since none are greater
//than EPSILON which is 1.
System.
out.
printf("%.10f\n", addInverses
(1)) ; System.
out.
println("0.0000000000 is expected.") ; System.
out.
println("------------") ;
//In this third call, one term is used since only the first one (1)
//is greater than EPSILON which is 0.5
System.
out.
printf("%.10f\n", addInverses
(0.5)) ; System.
out.
println("1.0000000000 is expected.") ; System.
out.
println("------------") ;
System.
out.
printf("%.10f\n", addInverses
(0.3)) ; System.
out.
printf("%.10f is expected.\n",
1 + 0.5 + 1/3.0) ; System.
out.
println("------------") ;
System.
out.
printf("%.10f\n", addInverses
(1E
-4
)) ; System.
out.
println("9.7875060360 is expected.") ; System.
out.
println("------------") ;
System.
out.
printf("%.10f\n", addInverses
(1E
-5
)) ; System.
out.
println("------------") ; }
/**
Adds up 1 + 1/2 + 1/3 + ... + 1/n,
where 1/n is the last term in the sequence greater than a
given constant called EPSILON.
That is, we only use terms which are greater than EPSILON.
For example, if EPSILON is 0.3, then return 1 + 1/2 + 1/3
and if EPSILON is 0.5, then return 1 (since 1/2 is not greater than 0.5)
@param EPSILON a small threshold, above which we keep adding 1/n,
for n = 1, 2, 3, ...
*/
//-----------Start below here. To do: approximate lines of code = 12
// 1. write the static method
public static double addInverses(double EPSILON) {
double returnVal = 0,
nextTerm = 0;
int counter = 1;
while ((nextTerm = (1.0 / counter++ )) > EPSILON)
returnVal += nextTerm;
return returnVal;
}
//-----------------End here. Please do not remove this comment. Reminder: no changes outside the todo regions.
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lIHsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQkvL0luIHRoaXMgZmlyc3QgY2FsbCwgbm8gdGVybXMgYXJlIHVzZWQgc2luY2Ugbm9uZSBhcmUgZ3JlYXRlcgoJCS8vdGhhbiBFUFNJTE9OIHdoaWNoIGlzIDIuCgkJU3lzdGVtLm91dC5wcmludGYoIiUuMTBmXG4iLCBhZGRJbnZlcnNlcygyKSkgOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiMC4wMDAwMDAwMDAwIGlzIGV4cGVjdGVkLiIpIDsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLSIpIDsKCQoJCS8vSW4gdGhpcyBzZWNvbmQgY2FsbCwgbm8gdGVybXMgYXJlIHVzZWQgc2luY2Ugbm9uZSBhcmUgZ3JlYXRlcgoJCS8vdGhhbiBFUFNJTE9OIHdoaWNoIGlzIDEuCgkJU3lzdGVtLm91dC5wcmludGYoIiUuMTBmXG4iLCBhZGRJbnZlcnNlcygxKSkgOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiMC4wMDAwMDAwMDAwIGlzIGV4cGVjdGVkLiIpIDsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLSIpIDsKCQoJCS8vSW4gdGhpcyB0aGlyZCBjYWxsLCBvbmUgdGVybSBpcyB1c2VkIHNpbmNlIG9ubHkgdGhlIGZpcnN0IG9uZSAoMSkKCQkvL2lzIGdyZWF0ZXIgdGhhbiBFUFNJTE9OIHdoaWNoIGlzIDAuNQoJCVN5c3RlbS5vdXQucHJpbnRmKCIlLjEwZlxuIiwgYWRkSW52ZXJzZXMoMC41KSkgOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiMS4wMDAwMDAwMDAwIGlzIGV4cGVjdGVkLiIpIDsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLSIpIDsKCQoJCVN5c3RlbS5vdXQucHJpbnRmKCIlLjEwZlxuIiwgYWRkSW52ZXJzZXMoMC4zKSkgOwoJCVN5c3RlbS5vdXQucHJpbnRmKCIlLjEwZiBpcyBleHBlY3RlZC5cbiIsIDEgKyAwLjUgKyAxLzMuMCkgOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tIikgOwoJCgkJU3lzdGVtLm91dC5wcmludGYoIiUuMTBmXG4iLCBhZGRJbnZlcnNlcygxRS00KSkgOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiOS43ODc1MDYwMzYwIGlzIGV4cGVjdGVkLiIpIDsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLSIpIDsKCQoJCVN5c3RlbS5vdXQucHJpbnRmKCIlLjEwZlxuIiwgYWRkSW52ZXJzZXMoMUUtNSkpIDsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLSIpIDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgICBBZGRzIHVwIDEgKyAxLzIgKyAxLzMgKyAuLi4gKyAxL24sCiAgICAgICB3aGVyZSAxL24gaXMgdGhlIGxhc3QgdGVybSBpbiB0aGUgc2VxdWVuY2UgZ3JlYXRlciB0aGFuIGEgCiAgICAgICBnaXZlbiBjb25zdGFudCBjYWxsZWQgRVBTSUxPTi4gIAogICAgICAgVGhhdCBpcywgd2Ugb25seSB1c2UgdGVybXMgd2hpY2ggYXJlIGdyZWF0ZXIgdGhhbiBFUFNJTE9OLgoKICAgICAgIEZvciBleGFtcGxlLCBpZiBFUFNJTE9OIGlzIDAuMywgdGhlbiByZXR1cm4gMSArIDEvMiArIDEvMwogICAgICAgYW5kIGlmIEVQU0lMT04gaXMgMC41LCB0aGVuIHJldHVybiAxICAoc2luY2UgMS8yIGlzIG5vdCBncmVhdGVyIHRoYW4gMC41KQogICAgICAgQHBhcmFtIEVQU0lMT04gYSBzbWFsbCB0aHJlc2hvbGQsIGFib3ZlIHdoaWNoIHdlIGtlZXAgYWRkaW5nIDEvbiwKICAgICAgICAgIGZvciBuID0gMSwgMiwgMywgLi4uIAogICAgICovCiAgICAvLy0tLS0tLS0tLS0tU3RhcnQgYmVsb3cgaGVyZS4gVG8gZG86IGFwcHJveGltYXRlIGxpbmVzIG9mIGNvZGUgPSAxMgogICAgLy8gMS4gd3JpdGUgdGhlIHN0YXRpYyBtZXRob2QKICAgIHB1YmxpYyBzdGF0aWMgZG91YmxlIGFkZEludmVyc2VzKGRvdWJsZSBFUFNJTE9OKSB7CgkJZG91YmxlIHJldHVyblZhbCA9IDAsCiAgICAJCSAgIG5leHRUZXJtID0gMDsKICAJCQogIAkJaW50IGNvdW50ZXIgPSAxOwogICAgCQogICAgCXdoaWxlICgobmV4dFRlcm0gPSAoMS4wIC8gY291bnRlcisrICkpID4gRVBTSUxPTikKCQkJcmV0dXJuVmFsICs9IG5leHRUZXJtOwoJCQoJCXJldHVybiByZXR1cm5WYWw7IAogICAgfQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLUVuZCBoZXJlLiBQbGVhc2UgZG8gbm90IHJlbW92ZSB0aGlzIGNvbW1lbnQuIFJlbWluZGVyOiBubyBjaGFuZ2VzIG91dHNpZGUgdGhlIHRvZG8gcmVnaW9ucy4KfQ==