#c
#c
Вопрос:
У меня здесь есть этот код, который должен выводить все возведенные в квадрат числа до n . Например, если вы введете 10
, это отобразится 1 4 9
. Проблема в том, что когда я ввожу 25, он должен был выдавать выходные 1 4 9 16 25
данные. Но вместо этого он показывает 1 4 9 16 24
#include <iostream>
using namespace std;
#include <cmath>
int main(){
int a, b;
cin >> a;
for(int i = 1; i <= a; i )
{
b = pow(i,2);
if (b <= a) cout << b << " ";
}
return 0;
}
Комментарии:
1. Не используйте
pow
функцию, потому что она предназначена для с плавающей запятой. Вместо этого попробуйтеb = i * i;
. Последнее также более эффективно.2. Ваша проблема связана с преобразованием целого числа в число с плавающей запятой, а затем с плавающей запятой в целое число. Попробуйте это:
double d = 5.0 * 5.0; std::cout << d << "n";
.3. Используйте
std::pow()
вместо простогоpow()
, первый имеет перегрузки для целых чисел. Версия с плавающей запятой приведет к ответу с плавающей запятой, который может быть не совсем эквивалентен 25. Если оно чуть меньше, преобразование из числа с плавающей запятой в целое число округлит его до 24.4. Примечание: если
b
большеa
— вы должны выйти из цикла5. Не удалось воспроизвести ваш пример: попробуйте онлайн!
Ответ №1:
если вы используете только целые числа и квадратные числа, вам не нужна математическая библиотека для решения, вы можете получить квадрат числа, умножив его на себя.
И вы можете добиться лучшей производительности, если выйдете из цикла, когда дойдете до первого квадратного числа, которое больше вашего входного числа, больше не нужно вычислять.
пример кода:
#include <iostream>
int main()
{
int a;
std::cin >> a;
for (int b, i = 1;; i)
{
b = i * i;
if (b > a)
break;
std::cout << b << " ";
}
return 0;
}
Ответ №2:
Ваша проблема, вероятно, вызвана функцией pow(). Хотя я не смог воспроизвести эту ошибку (cmath в MinGW и Visual C использует std::pow, который имеет целочисленные перегрузки начиная с C 98), я полагаю, что ваш компилятор по какой-то причине использует перегрузку с плавающей запятой. Вы должны попробовать заменить b = pow(i,2)
на b = i * i
.