您的位置:首页 > 其它

华为OJ高精度数的加减法

2016-03-09 16:02 197 查看
import java.util.Scanner;

import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;

public class Main {
public static String add(String str1, String str2) {
if (str1.length() < str2.length()) {
String temp = str1;
str1 = str2;
str2 = temp;
}
int index = 0;
int flag = 0;
char[] result = new char[str1.length() > str2.length() ? str1.length()
: str2.length()];
while (str1.length() > index && str2.length() > index) {
int sum = str1.charAt(str1.length() - index - 1)
+ str2.charAt(str2.length() - index - 1) - '0' + flag;
if (sum > '9') {
result[result.length - index - 1] = (char) (sum - 10);
flag = 1;
} else {
result[result.length - index - 1] = (char) sum;
flag = 0;
}
index++;
}
if (str1.length() >= index) {
for (int i = index; i < str1.length(); i++) {
int sum = str1.charAt(str1.length() - index - 1) + flag;
if (sum > '9') {
result[result.length - index - 1] = (char)(sum - 10);
flag = 1;
}else {
result[result.length - index - 1] = (char)(sum);
flag = 0;
}

index++;
}
}
if (flag == 1) {
return "1" + new String(result);
}else {
return new String(result);
}

}

public static String subtract(String str1, String str2){
String sign = "";
if (str1.length() < str2.length()) {
String temp = str1;
str1 = str2;
str2 = temp;
sign = "-";
}else if (str1.length() == str2.length()) {
if (str1.compareTo(str2)<0) {
String temp = str1;
str1 = str2;
str2 = temp;
sign = "-";
}
}
int index = 0;
int flag = 0;
char[] result = new char[str1.length()>str2.length()?str1.length():str2.length()];
while (str1.length()>index && str2.length()>index) {
int sum = str1.charAt(str1.length()-index-1)-str2.charAt(str2.length()-index-1)+'0' - flag;
if (sum<'0') {
flag = 1;
result[result.length-index-1] = (char)(sum + 10);
}else {
flag = 0;
result[result.length-index-1] = (char)(sum);
}
index++;
}
if (str1.length()>=index) {
for (int i = index; i < str1.length(); i++) {
int sum = (char)(str1.charAt(str1.length()-index-1)-flag);
if (sum<'0') {
result[result.length-index-1] = (char)(sum+10);
flag = 1;
}else {
result[result.length-index-1] = (char)sum;
flag = 0;
}
index++;
}
}
return sign + new String(result);
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str1 = scanner.next();
String str2 = scanner.next();
if (str1.contains("-") && str2.contains("-")) {
System.out.println("-"
+ add(str1.substring(1), str2.substring(1)));
} else if (!str1.contains("-") && !str2.contains("-")) {
System.out.println(add(str1, str2));
} else {
String result = "";
if (str1.contains("-")) {
result = subtract(str2,str1.substring(1)).replace("0", "");
if (result.length() == 0) {
result = "0";
}
System.out.println(result);
} else {
result = subtract(str1, str2.substring(1)).replace("0", "");
if (result.length() == 0) {
result = "0";
}
System.out.println(result);
}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: