import java.io.IOException;
import java.math.BigDecimal;
public class Example9_22 {
public static void main(String[] args) throws IOException {
Big_Decimal a = new Big_Decimal();
a.BigDecimal_Add("12212.5132", "3232323.43323234");
a.Sub("12212.5132", "3232323.43323234");
a.Mul("65555.5453654654", "99.353");
a.Div("99999.99999", "888.88888");
BigDecimal
}
}
class Big_Decimal {
int decimal1, decimal2;
long integer, decimal;
public void BigDecimal_Add(String a, String b) {
int i = a.indexOf('.');
String z1 = a.substring(0, i);
String x1 = a.substring(i + 1, a.length());
i = b.indexOf('.');
String z2 = b.substring(0, i);
String x2 = b.substring(i + 1, b.length());
int l1 = x1.length();
int l2 = x2.length();
int l = Math.abs(l1 - l2);
String s = "";
for (i = 0; i < l; i++)
s = s + '0';
if (l1 < l2)
x1 = x1 + s;
else
x2 = x2 + s;
integer = Integer.parseInt(z1) + Integer.parseInt(z2);
decimal = Integer.parseInt(x1) + Integer.parseInt(x2);
decimal1 = Integer.parseInt(x1);
decimal2 = Integer.parseInt(x2);
String s1 = String.valueOf(decimal);
StringBuilder stringBuilder = new StringBuilder(s1);
if (s1.length() > Math.max(x1.length(), x2.length())) {
integer++;
stringBuilder.delete(0, 1);
s1 = stringBuilder.toString();
System.out.println(s1);
decimal = Integer.parseInt(s1);
}
System.out.printf("%d.%s\n", integer, s1);
}
public void Sub(String a, String b) {
int i = a.indexOf('.');
String z1 = a.substring(0, i);
String x1 = a.substring(i + 1, a.length());
i = b.indexOf('.');
String z2 = b.substring(0, i);
String x2 = b.substring(i + 1, b.length());
integer = Integer.parseInt(z1) - Integer.parseInt(z2);
int l1 = x1.length();
int l2 = x2.length();
int ll = Math.max(l1, l2);
int l = Math.abs(l1 - l2);
String s = "";
for (i = 0; i < l; i++)
s = s + '0';
if (l1 < l2)
x1 = x1 + s;
else
x2 = x2 + s;
int sum = 1;
for (i = 0; i < l1; i++)
sum = sum * 10;
if (Integer.parseInt(x1) < Integer.parseInt(x2)) {
integer--;
decimal = Integer.parseInt(x1) + 1 * sum - Integer.parseInt(x2);
} else
decimal = Integer.parseInt(x1) - Integer.parseInt(x2);
String s1 = String.valueOf(decimal);
if (s1.length() < ll)
l = ll - s1.length();
s = "";
for (i = 0; i < l; i++)
s = s + '0';
s1 = s + s1;
decimal = Integer.parseInt(s1);
System.out.printf("%d.%s\n", integer, s1);
}
public void Mul(String a, String b) {
int i = a.indexOf('.');
int j = b.indexOf('.');
a = a.replace(".", "");
b = b.replace(".", "");
// StringBuffer stringBuffer = new StringBuffer(a);
// stringBuffer.reverse();
// a = stringBuffer.toString();
// stringBuffer = new StringBuffer(b);
// stringBuffer.reverse();
// b = stringBuffer.toString();
// System.out.println(a + b);
int n = i + j;
int k = a.length() + b.length() - n;
char[] a1 = a.toCharArray();
char[] b1 = b.toCharArray();
int[] mul;
int sum;
mul = new int[a.length() + b.length()];
for (i = 0; i < a.length() + b.length(); i++)
mul[i] = 0;
for (i = 0; i < a1.length; i++) {
for (j = 0; j < b1.length; j++) {
mul[i + j] += (a1[i] - '0') * (b1[j] - '0');
}
}
for (i = mul.length - 1; i > 0; i--) {
mul[i - 1] += mul[i] / 10;
mul[i] = mul[i] % 10;
}
for (i = 0; i < mul.length - 1; i++) {
System.out.print(mul[i]);
if (i == n-2)
System.out.print(".");
}
System.out.println();
}
public void Div(String a, String b) {
int i = a.indexOf('.');
int j = b.indexOf('.');
a = a.replace(".", "");
b = b.replace(".", "");
int n = i-j ;
char[] a1 = a.toCharArray();
int[] s = new int[100];
int[] result = new int[100];
for (i = 0; i < 100; i++) {
s[i] = 0;
result[i] = 0;
}
for (i = 0; i < a.length(); i++) {
s[i + 1] = a1[i] - '0';
}
int x = 0;
for (i = 1; i < 30; i++) {
result[i] = (x * 10 + s[i]) / Integer.parseInt(b);
x = (x * 10 + s[i]) % Integer.parseInt(b);
}
for (i = 0; i < 100; i++)
if (result[i] != 0) {
break;
}
int k = 0;
for (j = i; j < 30; j++) {
k++;
System.out.print(result[j]);
if (k == n+1)
System.out.print(".");
}
}
}
乘法和除法都是转化成大数乘法和除法的方法来实现的。