Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package euler;
- public class ChainMember {
- private int n;
- // we use a -1 as n to indicate that this is a 89 to differ them from 0 or 1
- private static final ChainMember EIGHTYNINE = new ChainMember(-1);
- public ChainMember(int n) {
- this.n = n;
- }
- private static int next(int n) {
- String s = String.valueOf(n);
- int sum = 0;
- for (int i = 0; i < s.length(); i++) {
- int d = s.charAt(i) - 48;
- sum += d*d;
- }
- return sum;
- }
- public ChainMember next() {
- if (n == 0) return null;
- if (n == 1) return null;
- if (n == 89) return EIGHTYNINE;
- ChainMember next = new ChainMember(next(n));
- return next;
- }
- public boolean is89() {
- return n == -1;
- }
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof ChainMember)) return false;
- return (n == ((ChainMember) obj).n);
- }
- public static void main(String[] args) {
- long s = System.currentTimeMillis();
- int eightyniners = 0;
- for (int i = 0; i < 10_000_000; i++) {
- ChainMember cm = new ChainMember(i);
- while (cm != null) {
- if (cm.is89()) {
- eightyniners++;
- break;
- }
- cm = cm.next();
- }
- }
- System.out.println(eightyniners);
- System.out.println((System.currentTimeMillis() - s) / 1000 + "s");
- }
- @Override
- public String toString() {
- return String.valueOf(n);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement