import java.util.ArrayList; import java.util.Arrays; import java.util.List;
public class clacdemo {
public static void main(String[] args) { String four = "00000100"; String five = "00000101"; System.out.println(sum(four, five)); }
public static String sum(String num1, String num2) { List<String> list = new ArrayList<>(); list.add(xor(num1, num2)); list.add(and(num1, num2)); if (isZero(list.get(list.size() - 1))) { return list.get(list.size() - 2); } while (true) { list.add(carry(list.get(list.size() - 1))); list.add(xor(list.get(list.size() - 3), list.get(list.size() - 1))); list.add(and(list.get(list.size() - 4), list.get(list.size() - 2))); if (isZero(list.get(list.size() - 1))) { return list.get(list.size() - 2); } } }
public static String xor(String num1, String num2) { List<String> numList1 = Arrays.asList(num1.split("")); List<String> numList2 = Arrays.asList(num2.split("")); List<String> result = new ArrayList<>(); for (int i = 0; i < numList1.size(); i++) { if (numList1.get(i).equals(numList2.get(i))) { result.add("0"); } else { result.add("1"); } } return String.join("", result); }
public static String and(String num1, String num2) { List<String> numList1 = Arrays.asList(num1.split("")); List<String> numList2 = Arrays.asList(num2.split("")); List<String> result = new ArrayList<>(); for (int i = 0; i < numList1.size(); i++) { if ("1".equals(numList1.get(i)) && "1".equals(numList2.get(i))) { result.add("1"); } else { result.add("0"); } } return String.join("", result); }
public static Boolean isZero(String num) { List<String> numList = Arrays.asList(num.split("")); for (String tempNum : numList) { if ("1".equals(tempNum)) { return false; } } return true; }
public static String carry(String num) { List<String> numList = Arrays.asList(num.split("")); for (int i = 0; i < numList.size(); i++) { if ("1".equals(numList.get(i))) { try { numList.set(i - 1, "1"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("溢出!"); System.exit(0); } numList.set(i, "0"); } } return String.join("", numList); } }
|