import java.math.BigInteger;
import java.util.*;
/**
* NC359 大数相减
* @author d3y1
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num1 string字符串
* @param num2 string字符串
* @return string字符串
*/
public String substring (String num1, String num2) {
return solution1(num1, num2);
// return solution2(num1, num2);
}
/**
* 模拟法
* @param num1
* @param num2
* @return
*/
private String solution1(String num1, String num2){
boolean isNegative = false;
if(num1.length() < num2.length()){
isNegative = true;
}else if(num1.length() == num2.length()){
for(int i=0; i<num1.length(); i++){
if(num1.charAt(i) < num2.charAt(i)){
isNegative = true;
break;
}
}
}
if(isNegative){
String tmp = num1;
num1 = num2;
num2 = tmp;
}
int len1 = num1.length();
int len2 = num2.length();
char[] num1Chars = num1.toCharArray();
char[] num2Chars = num2.toCharArray();
int digit1,digit2;
int digit;
StringBuilder sb = new StringBuilder();
for(int i=len1-1,j=len2-1; i>=0; i--,j--){
digit1 = num1Chars[i]-'0';
digit2 = j>=0?num2Chars[j]-'0':0;
if(digit1 >= digit2){
digit = digit1 - digit2;
}else{
// 向高位借1
int hDigit;
for(int k=i-1; k>=0; k--){
hDigit = num1Chars[k]-'0';
if(hDigit > 0){
num1Chars[k]--;
break;
}else{
num1Chars[k] += 9;
}
}
digit = digit1 + 10 - digit2;
}
sb.append(digit);
}
String result = sb.reverse().toString();
// 为0
String regex = "0+";
if(result.matches(regex)){
return "0";
}
// 去掉前缀0
for(int i=0; i<result.length(); i++){
if(result.charAt(i) != '0'){
result = result.substring(i);
break;
}
}
// 负数
if(isNegative){
result = "-"+result;
}
return result;
}
/**
* BigInteger()
* @param num1
* @param num2
* @return
*/
private String solution2(String num1, String num2){
return new BigInteger(num1).subtract(new BigInteger(num2)).toString();
}
}