Advertisement
Guest User

Untitled

a guest
Aug 21st, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. package com.fngn.bt.nodes;
  2.  
  3. import java.util.*;
  4.  
  5. /**
  6. * Created by RyanZhu on 20/08/2017.
  7. */
  8. public class GCD {
  9. private int gcd;
  10. private Stack<Wrapper> stack1 = new Stack<>();
  11. private Stack<Wrapper> stack2 = new Stack<>();
  12. private static class Wrapper {
  13. int val;
  14. int symbol;
  15.  
  16. public Wrapper(int val) {
  17. this.val = Math.abs(val);
  18. this.symbol = val > 0 ? 1 : -1;
  19. }
  20.  
  21. @Override
  22. public String toString() {
  23. return String.valueOf(val * symbol);
  24. }
  25. }
  26.  
  27. private void gcd (int a, int b) {
  28. if (a % b == 0) {
  29. gcd = b;
  30. } else {
  31. gcd(b, a % b);
  32. int mod = a % b;
  33. int n = a / b;
  34. if (stack1.isEmpty() && stack2.isEmpty()) {
  35. stack1.push(new Wrapper(a));
  36. for (int i = 0; i < n; i++) {
  37. stack1.push(new Wrapper(-b));
  38. }
  39. printStack();
  40. } else if (stack2.isEmpty()) {
  41. processStack(a, b, mod, n, stack1, stack2);
  42. } else {
  43. processStack(a, b, mod, n, stack2, stack1);
  44. }
  45. }
  46. }
  47.  
  48. private void processStack(int a, int b, int mod, int n, Stack<Wrapper> st1, Stack<Wrapper> st2) {
  49. while (!st1.isEmpty()) {
  50. Wrapper top = st1.pop();
  51. if (top.val == mod) {
  52. st2.push(new Wrapper(a * top.symbol));
  53. for (int i = 0; i < n; i++) {
  54. st2.push(new Wrapper(-b * top.symbol));
  55. }
  56. } else {
  57. st2.push(top);
  58. }
  59. }
  60. printStack();
  61. }
  62.  
  63. private void end() {
  64. Stack<Wrapper> results = stack1.isEmpty() ? stack2 : stack1;
  65. Map<Integer, Integer> map = new HashMap<>();
  66. while(!results.isEmpty()) {
  67. Wrapper top = results.pop();
  68. if (!map.containsKey(top.val)) {
  69. map.put(top.val, 0);
  70. }
  71. map.put(top.val, map.get(top.val) + top.symbol);
  72. }
  73. List<Integer> keys = new ArrayList<>(map.keySet());
  74. System.out.println(String.format("gcd: %d, %d * %d + %d * %d",
  75. gcd, keys.get(0), map.get(keys.get(0)), keys.get(1), map.get(keys.get(1))));
  76. }
  77.  
  78. public void execute(int a, int b) {
  79. gcd(a, b);
  80. end();
  81. }
  82.  
  83. public static void main(String[] args) {
  84. GCD gcd = new GCD();
  85. gcd.execute(13,25);
  86. }
  87.  
  88. void printStack() {
  89. System.out.println("print stack1");
  90. stack1.forEach(wrapper -> System.out.println(wrapper.toString()));
  91. System.out.println("print stack2");
  92. stack2.forEach(wrapper -> System.out.println(wrapper.toString()));
  93. }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement