Ja bym to napisał tak:
#include <iostream>
#include <windows.h>
#include <cmath>
using namespace std;
int a, b;
int main()
{
while( true )
{
int i = 1;
bool stop = false;
cin >> a;
while( stop == false )
{
b = a % (int)pow(10, i );
if( b == a )
stop = true;
if( a == b*b )
{
cout << "Tak" << endl;
break;
}
i++;
}
if( a != b*b )
{
cout << "Nie" << endl;
}
}
system( "pause" );
return 0;
}
Komentarz do kodu:
while( stop == false ) Pętla sprawdzajaca podzielność dla różnych przypadków
b = a % (int)pow(10, i ); Tutaj bierzemy resztę z dzielenia "a" przez 10 do potęgi "i", gdzie "i" jest zwiększane z każdym przejściem pętli o jeden. Więc sprawdzamy podzielność przez 10, 100, 1000 itd.
if( b == a ) Jeśli reszta z dzielenia jest równa samej liczbie, to znaczy, że osiągneliśmy limit. Dla 5 limitem będzie 10, bo 5 % 10 = 5, dla 25 limitem będzie 100, bo 25 % 100 = 25.
Reszta kodu jest chyba intuicyjna i powinieneś zrozumieć. W razie kłopotów — pytaj ;-)