операции с модулем на long long в c ++ - PullRequest
2 голосов
/ 12 июня 2011

Я работаю над простой факторизацией больших чисел (в основном, project 3 @ project Euler . Мне нужно использовать модуль для чисел, объявленных как long long. Каждый раз, когда я пытаюсь смоделировать это гигантское число, которое я получаюИсключение с плавающей запятой. Любая помощь будет высоко оценена. Спасибо.

Я выполнил это через gdb и посмотрю, что происходит. Ниже приведен мой код. На данный момент это очень грубая логика. Пожалуйста, не делайте этогодайте мне ответ на вопрос . Я с радостью приму помощь в улучшении этого, просто, пожалуйста, не дайте мне прямой ответ. Спасибо:)

long factor(long number) {
  string br = "\n\r";
  long x = 0;
  /*this modulus variable is an attempt
  to move the answer into a long long container
  to see if that solves my floating point exception,
  it didn't*/
  long long modulus;

  while(x <= number) {
    modulus = number % x;
    if(modulus == 0) {
      cout << number/x << br;
      return factor(number/x);
    }//if number % x
    else {
      return x;
    }//else
    x++;
  }//while

}//factor

Ответы [ 2 ]

8 голосов
/ 12 июня 2011

Не пытайтесь мод на 0, это не определено!Это приведет к ошибке деления на ноль.

long x = 0;
modulus = number % x; // x is 0 here and thus not valid

Чтобы немного расширить мой ответ, за статью Википедии об операциях по модулю

a по модулю 0 не определено в большинстве систем, хотя некоторые определяют его как.

1 голос
/ 12 июня 2011

Начните с

long x = 1 ;

, чтобы избежать деления на ноль.

...