本程序实现高精度的除法,基本可以实现算法,在输出时有些问题,结果中带有很多的0,请教大虾如何解决。谢谢!package cn.TestDiv;import java.util.Scanner;/**
 * @(#)testDiv.java
 * 
 * 
 * @author
 * @version 1.00 2008/4/23
 */public class testDiv { final static int N = 1000;
static Scanner in = new Scanner(System.in); static int compare(int[] a, int[] b, int k1, int k2) /* 比较大小函数 */
{
int i, t, flag = 0; /* flag作标志位 */
if (k1 < k2)
flag = 0; /* 被除数小于除数返回0 */
else if (k1 > k2)
flag = 1; /* 被除数大于除数返回1 */
else { /* 被除数和除数位数相等则逐位进行比较 */
i = k1;
t = 0;
while (t == 0 && i > 0) {
if (a[i] > b[i]) {
t = 1;
flag = 1;
} else if (a[i] == b[i])
i--;
else {
t = 1;
flag = 0;
}
}
if (i == 0 && t == 0)
flag = 2; /* 被除数等于除数返回2 */
}
return flag;
} /**
 * @param a
 * @param b
 * @param k1
 * @param k2
 * @return
 */
static int subtraction(int[] a, int[] b, int k1, int k2) /* 减法运算 */
{
int i, k;
int[] d = new int[N];
for (i = 0; i < k2; i++)
d[i] = b[i]; /* 把除数赋给数组d */
for (i = k2; i < N; i++)
d[i] = 0; /* d数组无数据的高位置0 */
k = k1 - k2 - 1; /* 计算减法起始位置 */
if (k < 0)
k = 0;
if (k > 0) {
for (i = k2 - 1; i >= 0; i--)
d[i + k] = d[i]; /* 移动减数位数与被减数对齐 */
for (i = 0; i < k; i++)
d[i] = 0; /* 移动后的其余位置0 */
}
for (i = 0; i < k1; i++) {
if (a[i] >= d[i])
a[i] -= d[i];
else {
a[i + 1] = a[i + 1] - 1;
a[i] = 10 + a[i] - d[i];
}
}
return k;
} /**
 * @param args
 */
public static void main(String[] args) { int[] a = new int[N];
int[] b = new int[N];
int[] c = new int[N]; int i, ka, kb, m, t, t1, t2, k, x, kd, kk; char[] a1 = new char[N];
char[] b1 = new char[N]; System.out.println("Input the divident:"); String first = new String();
first = in.nextLine();
for (i = 0; i < first.length(); i++) {
a1[i] = first.charAt(i);
} ka = first.length();
/*
 * 将输入的数存入整型数组中;;
 */
for (i = 0; i < ka; i++)
a[i] = a1[ka - i - 1] - '0'; System.out.println("Input the divisor:"); String second = new String();
second = in.nextLine();
for (i = 0; i < second.length(); i++) {
b1[i] = second.charAt(i);
} kb = second.length();
for (i = 0; i < kb; i++)
b[i] = b1[kb - i - 1] - '0';
kd = ka;
t2 = compare(a, b, ka, kb);// get the flag;
m = 0;
do {
while (a[ka - 1] == 0)
ka--;
t = compare(a, b, ka, kb);
if (t >= 1) {
k = subtraction(a, b, ka, kb);
c[k]++;
if (k > m)
m = k;
t1 = 0;
for (i = k; i <= m; i++) {
x = c[i] + t1;
c[i] = x % 10;
t1 = x / 10;
}
if (t1 > 0) {
m++;
c[m] = t1;
}
}
} while (t == 1);
if (t2 == 0) {
System.out.println("Quotient=0");
System.out.println("Remainder\n=");
for (i = kd - 1; i >= 0; i--)
System.out.printf("%d", a[i]); System.exit(1);
}
if (t2 == 2) {
System.out.println("Quotient= 1");
System.out.println("\nRemainder=0");
System.exit(1);
}
kk = kd;
while (c[kd - 1] != 0)
kd--;
System.out.println("Quotient=");
for (i = kd - 1; i >= 0; i--)
System.out.printf("%d", c[i]);
while (a[kk] != 0)
kk--;
System.out.println("\nRemainder=");
if (kk < 0) {
System.out.println("0");
System.exit(1);
}
for (i = kk; i >= 0; i--)
System.out.printf("%d", a[i]);
}
}运行示例:
Input the divident:
1234567898765432100
Input the divisor:
12345670
Quotient=
0000000100000072800
Remainder=
00000000000000656100