• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jaką użyć pętlę do programu sprawdzającego czy wprowadzona liczba kończy się swoim pierwiastkiem?

Object Storage Arubacloud
0 głosów
1,728 wizyt
pytanie zadane 8 grudnia 2015 w C i C++ przez sympi Nowicjusz (240 p.)

Cześć, chce napisać program, który sprawdzi czy wprowadzona liczba kończy się swoim pierwiastkiem (np. 25, 36, 625 itd.).

 

Zrobiłem ten program, ale tylko dla liczb dwucyfrowych (używam reszty z dzielenia przez 10)... Nie wiem jak i jakiej użyć pętli aby bez względu na długość liczby program i tak sprawdzał czy liczba kończy się swoim pierwiastkiem. Mój działający kod dla liczb dwucyfrowych:

#include <iostream>
#include <windows.h>

using namespace std;

int a, b;

int main()
{
    cout << "Program sprawdza czy wprowadzona liczba konczy sie swoim pierwiastkiem."<<endl<<"Wprowadz dowolna liczbe: ";
    cin >> a;

    b=a%10;
    if (a==b*b)
    {
        cout << "Tak"<<endl;
    }
    else
    {
        cout <<"Nie"<<endl;
    }

    system("pause");
    return 0;

}

 

3 odpowiedzi

+1 głos
odpowiedź 8 grudnia 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)

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 ;-)

+1 głos
odpowiedź 8 grudnia 2015 przez katolik6 Dyskutant (8,140 p.)
hmm... może najpierw wyliczyć pierwiastek, a potem sprawdzić...można przekonwertować liczbę na string, a potem od tyłu sprawdzać, czy są takie same, jeśli nie wystąpi różnica do końca pierwiastka cout<<"tak"; A odpowiadając na pytanie for(int i=pierwiastek.length(); i>0; i--)
komentarz 8 grudnia 2015 przez katolik6 Dyskutant (8,140 p.)
nie ważne, już jest lepsza koncepcja.
0 głosów
odpowiedź 8 grudnia 2015 przez sympi Nowicjusz (240 p.)

Dziękuję Wam za pomoc. Bardzo ciekawy pomysł  katolik6, zupełnie nie wpadłbym na towink 

 

Sebastian, analizuje właśnie Twój kod. Niestety gdzieś jest błąd, bo program dla liczby 625 pokazuje, że nie kończy się swoim pierwiastkiem :/. Ale już wiem na jakiej zasadzie to ma działać. Jeszcze raz dzięki.

komentarz 8 grudnia 2015 przez katolik6 Dyskutant (8,140 p.)
Wyświetla nie? Rzutowanie dziwnie wygląda, sprubój int(pow(10, i)). A co do mojego pomysłu, to jest zbyt "operacjożerny". Sprawdź b po przypisaniu modulo, coutem

Podobne pytania

0 głosów
1 odpowiedź 921 wizyt
0 głosów
1 odpowiedź 1,084 wizyt
pytanie zadane 27 października 2018 w C i C++ przez piter11251 Obywatel (1,280 p.)
0 głosów
2 odpowiedzi 886 wizyt
pytanie zadane 3 kwietnia 2017 w C i C++ przez nosfaratu Nowicjusz (160 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...