Ошибка с выражением исключения C ++ с плавающей точкой - PullRequest
0 голосов
/ 06 мая 2018

Я новичок в C ++ и пытаюсь получить цифры, например, 110. Я попробовал следующий код, но получил ошибку C ++ с плавающей точкой. Я не могу понять, что идет не так.

  int main()
{
 int p = 10;
 int j = 1;
while(110 % p >=1 || 110 % p ==0){
    cout<<110 % p;
    j++;
    p = p *10;
}
}

Может ли кто-нибудь исправить код?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Ваша проблема в том, что ваш модуль является остатком, если вы математически думаете о том, что вы делаете, это не имеет смысла. Когда вы делите число на другое число, есть либо остаток, либо его нет. Вы продолжаете в цикле до тех пор, пока есть или нет остаток. Это приводит к целочисленному переполнению на p.

Попробуйте это:

#include <iostream>

using namespace::std;

int main()
{
  // this prints out the digits backwards:
  for(int InitialNumber=110;InitialNumber!=0;InitialNumber/=10){
    int LastDigit=InitialNumber%10;
    cout<<LastDigit<<endl;
  }
  return 0;
}

Выход:

martyn@localhost ~ $ g++ test.cpp -std=c++11
martyn@localhost ~ $ ./a.out 
0
1
1

Если вы сохранили свой алгоритм, вы можете завершить его следующим образом:

int main()
{
  int p = 10;
  int j = 1;
  while( p < 110*10 ){
    cout<<110 % p<<endl;
    j++;
    p = p *10;
  }
}

Это остановило бы цикл, продолжающийся вечно и переполняющий P. И это дало бы вам:

martyn@localhost ~ $ ./a.out 
0
10
110

Я подозреваю, что это не то, что вы хотели, вместо этого вы хотели бы просто иметь первую цифру, поэтому вам нужно разделить вывод на предыдущую степень десяти следующим образом:

int main()
{
  int p = 10;
  while( p < 110*10 ){
    cout<<(110 % p)/(p/10)<<endl;
    p = p * 10;
  }
}

И это даст вам:

martyn@localhost ~ $ g++ test.cpp -std=c++11
martyn@localhost ~ $ ./a.out 
0
1
1

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

0 голосов
/ 06 мая 2018

Прежде всего, ваш код работает в бесконечном цикле. Я изменил вашу программу для печати р после каждого шага. Результат был:
enter image description here
Вы не можете выполнить% операции с 0 в качестве второго операнда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...