2014-12-04 140 views
0

我正在尋找重複序列的十進制輸出,我不能得到它輸出正確:/(我可能會回答有點晚,抱歉)輸出語句

例如。

N = 1,d = 7

七分之一= 0.142857142857142857 ...

輸出= 0。(142857)

N = 45,d = 56

56分之45= 0.803571428571428571428

輸出= 0.803(871428)

這裏是我下面的代碼:

import java.util.*; 
public class RepeatingSequence{ 
public static void main(String[] args){ 
    Scanner in = new Scanner(System.in); 
    System.out.print("Enter N,D: "); 
    double numerator = in.nextInt(); 
    double denominator = in.nextInt(); 

    double quotient = numerator/denominator; 
    String number = "" + quotient; 
    char n = number.charAt(0); 
    int j = 2; 
    int z = 0; 
    String output = ""; 
    char[] index = new char[100]; 

    for (int i = 3; (i < number.length()) && (number.charAt(j) >= number.charAt(i) || (number.charAt(j) <= number.charAt(i))); i++){ 
     index[z] = number.charAt(z); 
     index[j] = number.charAt(j); 
     index[i] = number.charAt(i); 
     if (index[i] != index[z]){ 
     System.out.print("(" + index[i] + ")"); 
     } 
    } 
} 
} 
+0

你應該怎麼做? I = 3?我會在搜索循環之前填充你的數組(或者只使用string.charAt) – eckes 2014-12-04 00:34:49

+0

這是一個比它最先出現的更難的問題。這是一項家庭作業嗎? – ajb 2014-12-04 00:34:52

+0

我= 3將確定在(2)的字符?我認爲那是我打算做的目的。 - eckes @ajb - 通過這並不是強制性的。但我需要它來獲得額外的學分。 – 2014-12-04 00:36:58

回答

0

確定數學上正確的答案是不容易的,需要一些數論。 (我實際上做了這樣的事情,我不得不查找像歐拉的總體功能和原始根的東西。)將double轉換爲String會產生問題,因爲像1/7這樣的數字不能完全代表double,並且結果字符串可能涉及一些四捨五入。

的替代方案,將在兩個例子工作,你給(但不會在任何情況下工作)是使用number你,然後在小數部分,找到一個子小號這樣S正好在number的旁邊出現。當然,我不打算給你代碼,但總體計劃是這樣的:

使用indexOf方法Strings找到.。如果這是索引N,則開始於N + 1

startIndex = Ñ啓動+ 1,嘗試此爲i = 1, 2, 3, ...直到流掉的number末尾:

if (number.substring(startIndex, startIndex + i).equals(number.substring(startIndex + i, startIndex + 2*i))) { 

如果這兩個子是相等的,則可以假定必須的重複小數。然後,您將輸出從number開始的子字符串startIndex,然後(,然後number.substring(startIndex, startIndex + i),然後)

如果i變得非常大以至於跑出字符串的末尾,則將startIndex增加1,然後從i = 1開始。

編輯:如果你的額外信貸分配確實是解決項目歐拉問題26(如@ChthonicProject在他的評論中提到的),那麼我會去與數論的解決方案,而不是近似解。對我來說這很難,這將作爲班級任務給予,即使是額外的學分,除非這是一個相當先進的班級。

+0

非常感謝您對提示(/提示? )。是的,這是我們書中的額外活動,我們的老師告訴我們,我們可以回答額外的學分。而且它不是一個高級班,我很害怕 – 2014-12-04 12:26:46

+0

這是正確的嗎? (i = 0; i <= number.length(); i ++) if(i == number.indexOf(「。」)) – 2014-12-05 02:41:08

+0

@RodGalangco這是多餘的。 'number.indexOf(「。」)'會搜索字符串來尋找'.';因此你不需要再次循環搜索它。 – ajb 2014-12-05 17:23:28