/**
*
* @author wll
* @date 2009/12/12
*/
public class SB {
public static void main(String[] args) {
System.out.println((double) (3/8.0));
System.out.println(fun(1, 7));
System.out.println(fun(3,8));
}
/**
* char *fun(unsigned i, unsigned j)如果i能除得尽j,就返回NULL
* 否则,如果除不尽就返回指向它的循环数字的指针,空间在该函数中分配 比如1/7 =
* 0.14285714285714285714285714285714将返回指向"142857"的指针, 1/2 = 0.5将返回NULL
*/
public static String fun(int i, int j) {
StringBuffer sb = new StringBuffer();
int t = i;
//存放除法所得的商
int[] div = new int[100];
//存放除法所得的余数
int[] mod = new int[100];
int d = 0, di = 0;
int index = -1;
//如果能够整除,就返回“NULL”
if(i%j==0)
return "NULL";
//否则,将i变为小于j的数
if (i > j) {
i = i % j;
t = i;
}
//第一个余数为数i%j
mod[d++] = t;
while (i < j) {
i = i * 10;
if (i < j) {
div[di++] = 0;
mod[d++] = i;
}
}
//此时i大于j,k为余数,m为商
int k, m;
do {
k = i % j;
m = i / j;
div[di++] = m;
index = tx(k, mod);
//如果k在mod数组中,结束循环
if (index != -1) {
break;
}
//将k加入数组
mod[d++] = k;
i = k * 10;
m = i / j;
k = i % j;
//System.out.println("index:" + index);
//余数为0,说明可以除尽
if (k == 0)
return "NULL";
} while (index == -1);
for (int mm = index; mm < di; mm++) {
//System.out.println("xx" + div[mm]);
sb.append(div[mm]);
}
return sb.toString();
}
//判断数k是否在数组中,若是,返回下标i,否则,返回-1.
private static int tx(int k, int[] mod) {
// TODO Auto-generated method stub
for (int i = 0; i < mod.length; i++) {
if (k == mod[i])
return i;
}
return -1;
}
}