2014-12-04 85 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