По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания. Формат входных данных Вводится натуральное число. Формат выходных данных Выведите ответ на задачу.
Sample Input: 50
Sample Output: 1 4 9 16 25 36 49
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int a, b = 1;
cin >> a;
while (b <= a) {
if (float(sqrt(b)) % 1 == 0) {
cout << b;
}
b++;
}
return 0;
}
В C++ для чисел с плавающей запятой не определен оператор взятия остатка %
.
Поэтому условие в данном предложении if
if (float(sqrt(b)) % 1 == 0) {
неверное.
Проще будет записать следующий цикл
unsigned int a;
std::cin >> a;
for ( unsigned int i = 1, b; ( b = i * i ) <= a; i++ ) std::cout << b << ' ';
std::cout << std::endl;
При этом нет никакой необходимости включать заголовок cmath
и использовать объявленную в нем функцию sqrt
.
Программу можно сделать более содержательной. Например,
#include <iostream>
int main()
{
while ( true )
{
std::cout << "Enter a non-negative number (0 - exit): ";
unsigned int a;
if ( not ( std::cin >> a ) || a == 0 ) break;
for ( unsigned int i = 1, b; ( b = i * i ) <= a; i++ ) std::cout << b << ' ';
std::cout << std::endl;
}
return 0;
}
Диалог с программой может выглядеть примерно так
Enter a non-negative number (0 - exit): 100
1 4 9 16 25 36 49 64 81 100
Enter a non-negative number (0 - exit): 50
1 4 9 16 25 36 49
Enter a non-negative number (0 - exit): 25
1 4 9 16 25
Enter a non-negative number (0 - exit): 0
Что обозначает эта строчка для меня загадка.
if (float(sqrt(b)) % 1 == 0) {
Найти остаток от деления на 1 квадратного корня числа. Что Вы этим хотели сказать? Хотели проверить является ли число целым? Так это делается не так
if (1 - floor(sqrt(b)) < 1e-6) {
А Ваша задача решается так
int b = 1;
int c = 1;
while (c <= a) {
cout << c;
b++;
c = b * b;
}
На мой взгляд, самая большая ошибка - решать вашу задачу методом перебора всех чисел и выяснять, не квадрат ли это число. Лучше идти в другом направлении и выводить поочереждно квадраты, пока они меньше запрошенного a
(код специально упрощен, чтобы вам было понятнее):
#include <iostream>
using namespace std;
int main()
{
int a,b = 1;
cin >> a;
while(b*b <= a)
{
cout << b*b << " ";
++b;
}
cout << endl;
}
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int a,sqr = 1, b = 1;
cin >> a;
while (sqr <= a) {
cout << sqr << " ";
b++;
sqr = b * b;;
}
return 0;
}
вывод:
50
1 4 9 16 25 36 49
500
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 441 484
Пишу свой двунаправленный список (шаблонный класс)Нужно организовать вставку с автосортировкой (т
Дан текстовый файл, содержащий целые числаУдалить из него все четные числа