Skip to content

Instantly share code, notes, and snippets.

@Krasnyanskiy
Last active July 9, 2016 18:01
Show Gist options
  • Save Krasnyanskiy/28262de987382b4948055f8a36381be1 to your computer and use it in GitHub Desktop.
Save Krasnyanskiy/28262de987382b4948055f8a36381be1 to your computer and use it in GitHub Desktop.
-java: algo
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicReference;
import static com.jayway.awaitility.Awaitility.await;
import static java.lang.Integer.parseInt;
import static java.lang.System.in;
import static java.math.BigInteger.ONE;
import static java.math.BigInteger.ZERO;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
/**
* @author Alexander Krasniansky
*/
public class Fib {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
final int n = parseInt(reader.readLine());
final AtomicReference<BigInteger> res = new AtomicReference<>();
await().atMost(100, MILLISECONDS).until(new Callable<Boolean>() {
public Boolean call() throws Exception {
res.set(fib(n));
return true;
}
});
String resultAsString = res.get().toString();
int length = resultAsString.length();
System.out.println(resultAsString.charAt(length - 1));
reader.close();
}
private static BigInteger fib(int n) {
BigInteger[] ints = new BigInteger[n + 1];
ints[0] = ZERO;
ints[1] = ONE;
for (int i = 2; i <= n; i++) {
ints[i] = ints[i - 1].add(ints[i - 2]);
ints[i - 2] = null;
}
return ints[ints.length - 1];
}
}