天天看點

如何判斷一個分數是否能化成非循環小數

①若一個分數的分子為1,如1/a=x(x為有限位的小數)

則可把x化為分母為10^n,分子為x×10^n的一個整數,n的取值要看x的小數位是幾位

則x×10^n=10^n/a=2^n·5^n/a,我們可知等式左邊是個整數,是以右邊的分母a定能整除10^n,

即a=2^i·5^j(i,j都大于等于0)時,1/a就為有限小數

反之,若a的因子中還有不是2和5的其他數,則分數1/a為無限循環小數

②若是一個一般的最簡分數b/a,若b/a為有限小數,則可認為是b與1/a的乘積

推斷過程如①,得出a至少整除10^n與b中的一個,否則b/a不為有限小數

③我覺得無限循環小數又分為循環節為1的和循環節大于1的兩類,如:

循環節為1的:0.3333333333......,0.1666666666666666......,0.12344444444......(這裡有的不是從小數點後的第一位開始循環的,而是從某一位開始循環,我們也把他認為是循環節為1)

循環節大于1的:0.01010101......,0.142857142857......,0.076923076923......

對于一個最簡分數b/a,若其為循環節為1的無限循環小數,則分母a為3或3的整數倍。反之,其循環節大于1

④若給你一個無限循環小數0.m......nm......n.......把其化為小數形式,該怎麼化?

其循環節為m......n,設其循環節内有x位數字

設原數0.m......nm......n.......=y

則y×10^x=m......n.m......n......

上面兩式相減:y(10^x-1)=m......n,即y=m......n/(10^x-1)

即化為分數形式即為以循環節為分子,分母為999.....9(9的位數與循環節的位數相同)

當然若你想把此分數化為最簡形式,卻不見得是件容易的事

例如1/7=0.142857142857......=142857/999999

代碼一:如何把輸出一個數的質因子

public class zhishu {
	public void separation(int i){
		int flag = 0;
		while(i!=0){
			flag = 0;
			for(int j=2;j<=i;j++){
				if(i%j==0){
					System.out.print(j+"+");
					i = i/j;
					flag = 1;
					break;
				}
			}
			if(flag == 0){
				System.out.print(i);
				break;
			}
		}
	}
	public static void main(String args[]){
		zhishu c = new zhishu();
		c.separation(121);
	}
}
           

代碼二:判斷一個分數能不能轉化成有限小數

public class Cycle {

	public boolean judge(int up , int down){
		if(down == 0) {      //判斷輸入,分母不能為0
			System.out.println("input Error");
			return false;
		}
		
		while(up > down){        //把一個分數化成真分數
			up = up-down;
		}
		
		for(int i=2 ; i<=up ; i++){             //分子分母約去最大公因子
			if(up%i == 0 && down%i == 0){
				up = up/i;
				down = down/i;
			}
		}

		while(down!=1){             //檢查分母是不是隻含有2,5兩種質因子
			if(down%2 == 0){
				down = down/2;
			}else if(down%5 == 0){
				down = down/5;
			}else{
				return false;
			}
		}
		return true;
	}
	
	public static void main(String[] args) {
		Cycle c = new Cycle();
		System.out.println(c.judge(10, 15));
	}
}
           

繼續閱讀