判断一个除数是否能除尽

/**
 *
 * @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;
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值