#c #c 11
Вопрос:
Например, если пользователь вводит число 21, я хочу, чтобы были перечислены все вежливые номера. таким образом, для 21 результат будет 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21. Я новичок в циклах, и мне трудно заставить это работать. Я не могу включить какие-либо глобальные переменные для этого задания. Любая помощь будет очень признательна. Спасибо.
Комментарии:
1.
n
никогда не вводится в эксплуатацию. Чтение из неинициализированной переменной является неопределенным поведением, и его, как правило, следует избегать. Ваш код также говорит о числах Фибоначчи и, похоже, использует для них формулу. После быстрого поиска в Интернете вы можете обнаружить, что числа, не являющиеся степенями двойки, являются вежливыми, поэтому вам просто нужно проверить, соответствует ли это число, а не печатать это в данном случае.2. Привет, Лала. Я исправил свой код, чтобы не печатать числа, которые являются степенями двух. При этом по-прежнему отображаются невежливые числа, такие как 9 и 32, когда я запускаю свою программу. Он также не отображает некоторые вежливые цифры. Я отредактировал свой пост, чтобы вы могли видеть мои обновления.
3. 9 вежлив, насколько я могу судить (2 3 4) и 32-это степень двух (2^5)
4. За последние несколько дней я видел по крайней мере 5 вопросов о вежливых цифрах с одинаковым кодом обработки ввода. Мне любопытно: это задание, в котором вам рекомендуется использовать переполнение стека?
Ответ №1:
Похоже, что вы просто исключаете числа, которые являются квадратами, что не приведет к правильному ответу. Вы можете либо создать массив до значения UP с начальным значением, равным 0, и пометить все степени 2 как 1, используя это для цикла:
for(int j=1;j<=upValue;j*=2){
arr[j]=1;
}
теперь вы отметили все степени двойки, а затем перебираете все значения от 1 до повышающего значения и выводите те, которые установлены в 0;
Ответ №2:
Следующая программа делает то, что вы хотите, чтобы она делала.
#include <iostream>
#include <math.h>
void politeNo(int input)
{
// Print all initial input Polite number
for (int n = 1; n <= input; n)
{
// Calculate nth Polite number
int result = (int)(n
(log((n (log(n) /
log(2))))) /
log(2));
// Display calculated result
std::cout << " " << resu<
if (result == input){break; }
}
}
int main()
{
int upValue = 0;
std::cout<<" What is the upper value ?";
std::cin >> upValue; //Stores user input into upValue
while (upValue < 1) //Validate user input of upper limit
{
std::cout << "What is the upper value? (must be an integer > 0) ";
std::cin >> upValue;
}
politeNo(upValue);
return 0;
}
Выход:
1 3 5 6 7 9 10 11 12 13 14 15 17 18 19 20 21
Комментарии:
1. Могу я предложить вам подумать о том, какие цифры невежливы ? Вы, вероятно, найдете гораздо более простой (и численно надежный) способ выполнения этой задачи. Кстати, пожалуйста, обратите внимание, что начиная с C 11 вы можете использовать std::log2 .