2016-09-24 59 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

我已經改變了我的第一個代碼,它現在正在工作。我粘貼它,因爲其他人可能會使用它。它的最終類型更短,有用,這就是爲什麼。 –