2016-11-05 4 views
0

Мне нужно написать логический метод, который проверяет, является ли число n круговым простым, используя только целые вычисления, так что нет строк. Я написал еще два метода, которые нужно включить.Проверка того, является ли целое число круговым простым числом без использования String

boolean isPrime(int n) { 
    if (n < 1) { 
     return false; 
    } else if (n == 1 || n == 2) { 
     return true; 
    } else if (n % 2 != 0) { 
     for (int i = 3; i < n; i+=2) { 
      if (n % i == 0) { 
       return false; 
      } 
     } 
     return true; 
    } else { 
     return false; 
    } 
} 

Это проверяет, является ли число простым.

int largestPowerOfTen(int n) { 
    for (int i = 1; i < n * 10; i*=10) { 
     if (n/i == 0) { 
      return i/10; 
     } 
    } 
    return 1; 
} 

Это возвращает наибольшую мощность десяти из числа. Например, 23 вернет 10, 704 вернет 100 и т. Д.

У меня возникла идея поместить каждую цифру в массив и переместить цифры оттуда, но я застрял в движущейся части.

boolean isCircularPrime(int n) { 
    ArrayList<Integer> k = new ArrayList<Integer>(); 
    int i = 0; 

    while (n != 0) { 
     k.add(n % 10); 
     n /= 10; 
     i++; 
    } 
    //??? 
} 

Так как мне перемещать цифры вокруг?

+1

Вы не должны нуждаться в ArrayList или строку: Вычислить последнюю цифру в качестве 'n' по модулю 10. Разделить' n' на 10 и округлить. Добавьте последнюю цифру раз 'mostPowerOfTen (n)' в 'n'. Теперь вы должны повернуть «n» на одно место справа. –

ответ

0

Предполагая «круговое простое число» это число, которое является простым числом для всех вращений цифр ...

Вы не можете просто повернуть номер, потому что нули не будут сохранены.

Сначала разбивайте число на массив - каждая цифра числа - элемент массива. Используйте n % 10, чтобы найти последнюю цифру, затем n /= 10 до n == 0.

Создать метод, который генерирует число из массива с указанным начальным индексом. Это суть проблемы, а вот какой-то код:

private static int generate(int[] digits, int index) { 
    int result = 0; 
    for (int i = 0; i < digits.length; i++) { 
     result = result * 10 + digits[(index + i) % digits.length]; 
    } 
    return result; 
} 

Затем перебирает весь возможный начальный индекс для ваших цифр и проверить, если это простое число.

Остальной код я оставляю читателю ...

0
import java.util.Scanner; 
class CircularPrime 
{ 
    public boolean prime(int n) 
    { 
     int lim=n,count=0; 
     for(int i=1;i<=lim;i++) 
     { 
      if(n%i==0)count++; 
     } 
     if(count==2) 
     return true; 
     else 
     return false; 
    } 
    public int circlize(int n) 
    { 
     int len,x,y,circle; 
     len=(""+n).length(); 
     x=n/(int)Math.pow(10,len-1); 
     y=n%(int)Math.pow(10,len-1); 
     circle=(y*10)+x; 
     return circle; 
     /** 
     Another way using String 
     String str = Integer.toString(n); 
     String arr = str.substring(1)+str.charAt(0); 
     int a = Integer.parseInt(arr); 
     return a; 
     **/ 
    } 
    public void check(int n) 
    { 
     int a=n; 
     boolean flag=true; 
     System.out.println("OUTPUT:"); 
     do 
     { 
      if(!(prime(a))) 
      { 
       flag=false; 
       break; 
      } 
      a=circlize(a); 
      System.out.println(a); 
     }while(a!=n); 
     if(flag)System.out.println(n+" IS A CIRCULAR PRIME"); 
     else System.out.println(n+" IS NOT A CIRCULAR PRIME"); 
    } 
    public static void main(String ar[]) 
    { 
     CircularPrime obj = new CircularPrime(); 
     Scanner sc = new Scanner(System.in); 
     System.out.print("Enter a number: "); 
     int n=sc.nextInt(); 
     obj.check(n); 
    } 
} 
+0

Спасибо @TT Я новичок в переполнении стека, поэтому я не знаю, как правильно отступать. – user8720114

+0

Добро пожаловать. Вы можете просмотреть [эту ссылку] (https://meta.stackexchange.com/q/22186/273645) за некоторыми пояснениями по форматированию в переполнении стека. –

 Смежные вопросы

  • Нет связанных вопросов^_^