Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. package euler;
  2.  
  3. public class ChainMember {
  4. private int n;
  5.  
  6. // we use a -1 as n to indicate that this is a 89 to differ them from 0 or 1
  7. private static final ChainMember EIGHTYNINE = new ChainMember(-1);
  8.  
  9. public ChainMember(int n) {
  10. this.n = n;
  11. }
  12.  
  13. private static int next(int n) {
  14. String s = String.valueOf(n);
  15. int sum = 0;
  16. for (int i = 0; i < s.length(); i++) {
  17. int d = s.charAt(i) - 48;
  18. sum += d*d;
  19. }
  20. return sum;
  21. }
  22.  
  23. public ChainMember next() {
  24.  
  25. if (n == 0) return null;
  26. if (n == 1) return null;
  27. if (n == 89) return EIGHTYNINE;
  28. ChainMember next = new ChainMember(next(n));
  29. return next;
  30. }
  31.  
  32. public boolean is89() {
  33. return n == -1;
  34. }
  35.  
  36. @Override
  37. public boolean equals(Object obj) {
  38. if (!(obj instanceof ChainMember)) return false;
  39. return (n == ((ChainMember) obj).n);
  40. }
  41.  
  42. public static void main(String[] args) {
  43.  
  44. long s = System.currentTimeMillis();
  45.  
  46. int eightyniners = 0;
  47. for (int i = 0; i < 10_000_000; i++) {
  48. ChainMember cm = new ChainMember(i);
  49. while (cm != null) {
  50. if (cm.is89()) {
  51. eightyniners++;
  52. break;
  53. }
  54. cm = cm.next();
  55. }
  56. }
  57. System.out.println(eightyniners);
  58. System.out.println((System.currentTimeMillis() - s) / 1000 + "s");
  59. }
  60. @Override
  61. public String toString() {
  62. return String.valueOf(n);
  63. }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement