Почему мое длинное длинное переполнение / отрицательное целочисленное деление? - PullRequest
2 голосов
/ 20 декабря 2011
for (long long j = factored_num / 3; j > 2 || factored_num != 1; j -= 2) {

На 64-битном компьютере я пытаюсь вычислить число.Этот код прекрасно работает, когда long long j = factored_num, но когда я делаю целочисленное деление, cout << j показывает, что j отрицательно - я предполагаю, что оно переполнено.Как я могу это исправить?

Я пробовал 3LL, j-= 2LL и т. Д. В случае, если это была проблема типа.Опять же, это определенно связано с частью деления, но я недостаточно знаком с типами данных, чтобы сразу решить проблему.

1 Ответ

2 голосов
/ 20 декабря 2011

Проблема может быть в конечном состоянии. Вы выполняете цикл , в то время как j больше 2 или factored_num не равно 1, поэтому, если factored_num не станет единицей, цикл не закончится, а j продолжит уменьшение до отрицательных чисел.

Я ожидаю, что условие будет j > 2 && factored_num != 1, то есть вы хотите end , если j равно 2 или меньше (почему 2; 2 является допустимым фактором) или factored_num равно 1 ( и поэтому больше не имеет никаких факторов).

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