2016-09-24 164 views
1

我想做一个程序,用户输入2个数字,然后程序给出这个间隙中的头号码。头号码算法

  • “头”号是可以除以它的分频器总数的数字。例如(1,2,3,4,6,8,12,24)所有这些数字可以除以24。是8个数字,然后24可以除以8.所以我们可以说24是一个头号码。*

我认为第二个循环有一个错误,但我不明白它在哪里。

import java.util.Scanner; 

public class tauNumber { 

    public static void main(String [] args){ 
     int start=0,stop=0,count=0; 
     Scanner input =new Scanner(System.in); 
     System.out.println("Please enter first number: "); 
     start=input.nextInt(); 
     System.out.println("Please enter last number: "); 
     stop=input.nextInt(); 

     for(int i=0+start;i<=stop;i++){ 

      for(int j=1;j<=start;j++){ 
       if(i%j==0){ 
        count++; 
       } 
      } 
      if(start/count==0){ 
       System.out.println(i+" is a tau number"); 
      } 
     } 
    } 
} 
+1

什么是“头数”到底是什么?但我的猜测是,你忘记在for循环开始时将'count'重新初始化为0。 – Tunaki

+0

@Tunaki [显然是一个常数](http://tauday.com/tau-digits)像'e'和'pi'。 – px06

+0

@ px06其实,[它是一个可以被除数除数的数字](http://mathworld.wolfram.com/RefactorableNumber.html)。 Tau也是2 * pi,但在这里不同。 – Tunaki

回答

0

不要说“头数”你应该只把它称为一个refactorable number为@Tunaki指出的。

我建议你分割你的代码成函数来得到怎么回事更好的理解,我认为这是你在找什么:

import java.util.Scanner; 

class TauNumber { 


    public static void main(String[] args){ 

     Scanner input =new Scanner(System.in); 
     System.out.println("Please enter first number: "); 
     int start=input.nextInt(); 
     System.out.println("Please enter last number: "); 
     int stop=input.nextInt(); 

     for(int i=start+1; i<stop; i++){ 
      if(refractorable(i)){ 
       System.out.println("Found tau number: "+ i); 
       break; 
      } 
     } 

    } 

    public static boolean refractorable(int number){ 
     if(sumDivisors(number) == 0) return false; 

     if(number % sumDivisors(number) == 0){ 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public static int sumDivisors(int number){ 
     int sum = 0; 
     for(int i=1; i<=number; i++){ 
      if(number % i == 0){ 
       sum++; 
      } 
     } 
     return sum; 
    } 


} 

注:我也想指出当你指定“差距”时,你的意思是什么?我把它作为start < x < stop,因为这将是差距,但它当然可以是start < x <= stop

+0

我的意思是开始

+0

@tbcse是的,值得注意的是,我想强调一下,我发布此代码的原因主要是您可以更习惯于将代码分解为函数和做事。它对调试和阅读有很大帮助,你会发现它有助于重用性。 – px06

+0

我正在努力:)上帝保佑你。 –

0

代码中的错误是您检查商的商0。要检查start是否可以被count整除,请检查余数是否为0。因此,您应该使用模数(%)运算符而不是分数(/)运算符。

下面是一个函数的代码,用于检查它的参数是否是一个tau编号。

private static boolean isTau(int tau){ 
    int count = 0; 
    for(int i=1; i<=tau; i++){ 
     if(tau % i == 0) 
      count++; 
    } 
    return (tau % count == 0) ; //returns true if 'tau' is a tau number 
} 

在main方法,你可以利用这个功能是这样的:

for(int i=start; i<=stop; i++){ 
    if(isTau(i)) 
     System.out.println(i+" is a tau number"); 
} 
+0

public static void main(String [] args){ \t \t int start = 0,stop = 0,count = 0; \t \t扫描仪输入=新扫描仪(System.in); \t \t System.out.println(“请输入第一个数字:”); \t \t start = input.nextInt(); \t \t System.out.println(“请输入最后一个数字:”); \t \t stop = input.nextInt(); \t \t \t \t的for(int i = 0 +开始; I <=停止;我++){ \t \t \t \t \t \t对(INT J = 1;Ĵ<= I; J ++){ \t \t \t (i%j == 0)\t \t \t \t count ++; \t \t \t \t \t} \t \t \t \t} \t \t \t \t如果(ⅰ%计数== 0){ \t \t \t \t \t的System.out.println(I + “是tau蛋白号码”); \t \t \t \t} \t \t \t \t计数= 0; \t \t \t \t \t \t \t \t} \t} –

+0

我已经看到你的代码在你的问题。为什么要粘贴在这里? – progyammer

+0

我已经改变了我的第一个代码,它现在正在工作。我粘贴它,因为其他人可能会使用它。它的最终类型更短,有用,这就是为什么。 –