Помогите разобраться в коде на Си

Программа для поиска автоморфных чисел среди первых 25 чисел. Что делает в программе цикл while?

#include <stdio.h>

//1, 5, 6, 25,

int main()
{   int res;
    long int no;
    for (int i = 1; i <= 25; i++) {
        no = i;
        long int square = no * no;
        res = 1;
        while (no > 0 && square > 0) {
            if (no % 10 != square % 10) {
                res = 0;
            }
            no = no / 10;
            square = square / 10;
        }
        if (res == 1) {
            printf("%d ", i);
        }
    }
    return 0; 
}

И почему если его убрать, то в консоли выведутся числа:1, 5, 6, 10, 11, 15 , 16, 20, 21, 25, хотя эти числа и так подходили под условие if на 13 строчке при существующем цикле while


Ответы (1 шт):

Автор решения: MBo

Цикл позволяет перебрать все цифры числа no (кстати, && square > 0 в условии можно убрать), а не только последнюю.

Вот у вас выводится, например, 15, хотя это не автоморфное число - совпадения одной последней цифры недостаточно.

А 25 - автоморфное, т.к. в цикле проверяется, то последняя цифра квадрата 5, и предпоследняя 2

→ Ссылка