当前位置:首页 > 开发 > 编程语言 > Java > 正文

java-两整数相除,求循环节

发表于: 2012-04-14   作者:bylijinnan   来源:转载   浏览:
摘要: import java.util.ArrayList; import java.util.List; public class CircleDigitsInDivision { /** * 题目:求循环节,若整除则返回NULL,否则返回char*指向循环节。先写思路。函数原型:char*get_circle_digits(unsigned k,unsigned j)
import java.util.ArrayList;
import java.util.List;

public class CircleDigitsInDivision {

	/**
	 * 题目:求循环节,若整除则返回NULL,否则返回char*指向循环节。先写思路。函数原型:char*get_circle_digits(unsigned k,unsigned j) 
	 * 解答: 回想我们使用手算时如何发现循环节: 
	 * -如果除得的余数等于0,则说明整除; 
	 * -如果除得的余数不等于0,则将余数乘以10,继续相除; 
	 * -直到发现两次获得的余数相等,则找到了循环节。
	 * 以下程序用一个ArrayList来存储余数,当某次求得的余数在这个ArrayList里面已存在,则循环找到
	 */
	public static void main(String[] args) {
		int dividend=1;
		for(int i=1;i<50;i++){
			String str = circleDigits(dividend,i);
			if(str!=null){
				System.out.println(dividend+"/"+i+"-"+str+"-"+(0.0+dividend)/i);
			}
		}
	}

	public static String circleDigits(int dividend, int divisor) {
		if (dividend < 0 || divisor <= 0) {
			return null;
		}
		if (dividend % divisor == 0) {
			return null;
		}
		List<Integer> quotientList = new ArrayList<Integer>();//store a/b
		List<Integer> leftList = new ArrayList<Integer>();//store a%b
		int left= dividend % divisor;
		while(!leftList.contains(left)){
			leftList.add(left);
			left*=10;
			int quotient=left / divisor;
			quotientList.add(quotient);
			left%=divisor;
			if(left==0){
				return null;
			}
		}
		int circleBegin=leftList.indexOf(left);
		quotientList = quotientList.subList(circleBegin,quotientList.size());
		//transfer list [x,y,z] to "xyz"
		StringBuilder sb=new StringBuilder();
		for(int i=0,len=quotientList.size();i<len;i++){
			sb.append(quotientList.get(i));
		}
		return sb.toString();
	}
}

java-两整数相除,求循环节

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
/* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 作 者: 霍雨佳 * 完成日
 话说这道题纠结了两天半,,从周日就开始想的,,就这样一直纠结,纠结,,今天上午终于是ac了
/* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:荆世琛 * 完成日期
一.引入 偶然在网上看见的,手痒了,就试了试,哈哈。。。。。。。做出来了,实际就是模拟。 下面的
两个整数相除,将结果用字符串返回。如果是循环小数,将循环的位用括号括起来。 函数原型为 void di
题目: Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja
/* 输入两个正整数 求出其最小公倍数和最大公约数并输出 */ #include<iostream> using namesp
字符串Hash 最近遇到了很多字符串问题, 可是我既不会后缀DC3,也不会后缀自动机,后缀树…… 于是,
Leonardo's Notebook Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1791 Accepted:
HDU 3746 Cyclic Nacklace(KMP:补齐循环节) http://acm.hdu.edu.cn/showproblem.php?pid=3746 题意:
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号