2014-02-02 3 views
-2

Я пытаюсь найти, если число является простым с использованием C#. Я написал код. Он должен работать, но по какой-то причине он не кажется.Поиск, если число является простым в C#

Это мой код (я попробовал ввод 7, 13 и т.д., говорит, что они не являются простыми):

class Program 
{ 
    static void Main(string[] args) 
    { 
     long u = Console.Read(); 
     primefinder(u); 
     Console.ReadLine(); 
    } 

    private static void primefinder(long a) 
    { 
     long counter = 0; 
     for (long b = 1; b <= a; b++) 
     { 
      if ((a % b) == 0) 
      { 
       counter++; 
      } 
     } 

     if (counter == 2) 
     { 
      Console.WriteLine("Is prime!"); 
     } 

     else 
     { 
      Console.WriteLine("Is not prime"); 
     } 

     Console.ReadLine(); 
    } 
} 
+1

вы должны смотреть на то, что долго и = Console.Read(); возвращает, я подозреваю, что вы захотите проанализировать строку в целое число. – kenny

+1

@DmitryBychenko - алгоритм в порядке. Это один из самых неэффективных, но правильных. – Igor

+0

Рассматривали ли вы какие-либо способы выяснить, как и почему это не работает? – Gabe

ответ

8

Console.Read считывает следующий символ из стандартного входного потока и возвращает кодовую точку. Это не то же самое, что и целое значение. Например, кодовая точка символа '7' равна 55. Кроме того, Read учитывает только один символ; таким образом, когда вы набираете 13, он возвращает код только для '1'.

Вместо Read вы должны использовать ReadLine, который будет считывать целую строку символов со стандартного ввода (т. Е. До тех пор, пока пользователь не нажмет «Enter») и не вернет их в виде строки. Затем вы можете преобразовать эту строку в длинную величину, используя ее метод Parse.

long u = long.Parse(Console.ReadLine()); 

Если вы хотите, чтобы избежать исключения, когда пользователь вводит неправильный ввод (например, буквы вместо цифр), вы должны использовать TryParse:

string s = Console.ReadLine(); 
long u; 
if (long.TryParse(s, out u)) 
    primefinder(u); 
else 
    Console.WriteLine("Your input was not a valid number!"); 
+1

Обратите внимание, что было бы лучше использовать 'long.TryParse' вместо' Parse' для предотвращения исключения 'FormatException' –

+1

@ Selman22: Вы правы; Я работал над этим в ответ, когда вы разместили свой комментарий. – Douglas

1

Console.Read() считывает символ из ввода и он преобразует его в длинный. Он не читает число.

Измените код, как:

string input = Console.ReadLine(); 
    long u = long.Parse(input); 
+0

Это было похоже на работу, спасибо! – user3204017

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