2015-01-11 126 views
0

我正在處理代碼,它檢查某個數字是否是特殊的,例如素數,Kaprekar數,自守數等等。它:自動化編號 - Java程序

import java.io.*; 
class automorphic 
{ 
    public static void main(String ags[])throws IOException 
    { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Enter a number."); 
     int num = Integer.parseInt(br.readLine()); 
     int sq = num*num; 
     String number = Integer.toString(sq); 
     int l = number.length(); 
     int x = l-1; 
     String s = number.substring(x); 
     int no = Integer.parseInt(s); 

     if(no == num) 
      System.out.println("Automorphic number."); 
     else 
      System.out.println("Not an automorphic number."); 
    } 
} 

代碼編譯得很好,執行也很好。但是,有一個邏輯錯誤。如果在提示輸入時輸入數字25,則屏幕顯示它不是自編號,而實際上是自編號。我該如何解決這個問題? TIA。

+1

通過做一些調試。 –

+0

順便說一句,一個自守數字是一個數字,它在平方時將數字本身保留在其後兩位數中。例如:25 x 25 = 625.最後兩位數字625代表數字25. –

+0

@OliverCharlesworth在哪一部分? –

回答

2

您檢查平方數字的最後一位是否等於原始數字,它只適用於單位數字。

您需要

String s = number.substring(number.length-Integer.toString(num).length()); 

Integer.toString(num).length()更換

String s = number.substring(x); 

是原數的位數,並number.substring(number.length-Integer.toString(num).length())會給你的平方數的最後Integer.toString(num).length()數字。

+0

這樣做。非常感謝! –

0
static boolean isAutomorphic(int number) 
{ 
    final int squared = number * number; 

    return squared % 100 == number % 100; 
} 
0

您可能會發現更容易前進,如果你重構和突破是自守檢查到一個新的功能,做這樣的事情:

import java.io.*; 

public class Automorphic { 
    public static void main(String ags[])throws IOException 
    { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Enter a number."); 
     int num = Integer.parseInt(br.readLine()); 
     if (isAutomorphic(num)) { 
      System.out.println("Automorphic number."); 
     } else { 
      System.out.println("Not an automorphic number."); 
     } 
    } 

    public static boolean isAutomorphic(int number) { 
     return ("" + number * number).endsWith("" + number); 
    } 
} 

非常容易擴展,以及...