import java.io.*;import java.util.*;public class Main{ public static void main(String[] args) throws FileNotFoundException { // Scanner scanner = new Scanner(new File("d://1.txt")); Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { String str1 = scanner.nextLine(); String str2 = scanner.nextLine(); System.out.println(sub(str1, str2)); } scanner.close(); } public static String sub(String str1, String str2) { int minLength = -1; int maxLength = -1; if (str1.length() > str2.length()) { minLength = str2.length(); maxLength = str1.length(); } else { minLength = str1.length(); maxLength = str2.length(); String temp = str1; str1 = str2; str2 = temp; } // 俩个数相减后剩下的最大长度 char cc[] = new char[maxLength]; // 大数减小数,好像负号和减法并没有关系 int dx = 0; int cIndex = 0; int dl = maxLength - minLength; for (int i = minLength - 1; i >= 0; i--) { int s = str1.charAt(i + dl) - str2.charAt(i) - dx; dx = 0; if (s < 0) { dx = 1; s += 10; } cc[cIndex++] = (char) (s + '0'); } for (int i = maxLength - cIndex-1; i >= 0; i--) { int s = str1.charAt(i) - '0' - dx; dx = 0; if (s < 0) { dx = 1; s += 10; } cc[cIndex++] = (char) (s + '0'); } if(cc[cIndex - 1] == '0') { return "0"; } StringBuilder sb = new StringBuilder(); for (int i = cIndex - 1; i >= 0; i--) { sb.append(cc[i]); } return sb.toString(); } public static String mul(String str1, String str2) { int minLength = -1; int maxLength = -1; if (str1.length() > str2.length()) { minLength = str2.length(); maxLength = str1.length(); } else { minLength = str1.length(); maxLength = str2.length(); String temp = str1; str1 = str2; str2 = temp; } int[] cc = new int[maxLength + minLength]; int maxIndex = -1; for (int i = minLength - 1; i >= 0; i--) { char c2 = str2.charAt(i); int cIndex = minLength - 1 - i; int dx = 0; for (int j = maxLength - 1; j >= 0; j--) { cc[cIndex] = (str1.charAt(j) - '0') * (c2 - '0') + dx + cc[cIndex]; dx = cc[cIndex] / 10; cc[cIndex] = cc[cIndex] % 10; cIndex++; } if (maxIndex < cIndex) { maxIndex = cIndex; } cIndex = maxIndex; if (dx != 0) { while (dx != 0) { cc[cIndex] = cc[cIndex] + dx; dx = cc[cIndex] / 10; cc[cIndex] = cc[cIndex] % 10; cIndex++; } maxIndex = cIndex; } } StringBuilder sb = new StringBuilder(); for (int i = maxIndex - 1; i >= 0; i--) { if (cc[i] == 0 && i == maxIndex - 1) { return "0"; } sb.append((char) (cc[i] + '0')); } return sb.toString(); }}
posted on 2017-01-21 11:13 阅读( ...) 评论( ...)