Programowanie i algorytmy

Liczby kwadratowe

Zad. 1. W pliku kwadratowe.txt znajduje się 1000 liczb kwadratowych.

 

a) do pliku a.txt, skopiuj wszystkie liczby, których początkowe cyfry tworzące liczbę podniesioną do kwadratu dadzą tą liczbę np. 100 = 102.

b) do pliku b.txt skopiuj wszystkie liczby, w których istnieje taka kombinacja cyfr tej liczby, z których stworzona liczba podniesiona  do kwadratu da tą liczbę, np. 5476 = 742.

 

 

Rozwiązanie

#include <cstdlib>
#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;

//funkcja zwraca ilość cyfr podanej liczby
short ile_cyfr(int liczba)
{
short i = 0;

while(liczba!=0)
{

i++;
liczba/=10;

}
return i;
}

//funkcja określająca, czy podana liczba spełnia kryteria zadania
bool b(int liczba)
{

int kw = (int)sqrt(liczba); //zmienna przechowuje kwadrat liczby
int ile = ile_cyfr(kw); //zmienna przechowuje ilość cyfr kwadratu liczby
int ile2 = ile_cyfr(liczba); //zmienna przechowuje ilość cyfr liczby
short *tab = new short[ile]; //tablica przechowująca cyfry kwadratu liczby
short *tab2 = new short[ile2]; //tablica przechowująca cyfry liczby
int i = 0;
//zapisanie cyfr kwadratu liczby do tablicy

while(kw!=0)
{

tab[i++] = kw%10;
kw/=10;

}

//zapisanie cyfr liczby do tablicy
i = 0;
int pom = liczba; //zmienna pomocnicza zapobiegająca stracie wartości zmiennej liczba

while(pom!=0)
{

tab2[i++] = pom%10;
pom/=10;

}


//szukanie cyfr kwadratu liczby w liczbie

bool ok; //zmienna określająca, czy dana liczba spełnia kryteria zadania

for(int i = 0;i<ile;i++)
{
int pom = liczba;
ok = false;

for(int j = 0;j<ile2;j++)
{

//sprawdzenie czy istnieje cyfra
if(tab[i]==tab2[j])
{

tab2[j] = -1; //wyeliminowanie znalezionej cyfry (eliminacje błędu w przypadku kilku takich samych cyfr)
ok=true;
break;

}

}

if(!ok)

break;

}

delete [] tab;
return ok;
}

int main(int argc, char *argv[])
{

ifstream odczyt("kwadratowe.txt");
ofstream zapis("b.txt");

int liczba;

while(!odczyt.eof())
{

odczyt>>liczba;
if(b(liczba))

zapis<<liczba<<endl;

}


odczyt.close();
zapis.close();

system("PAUSE");
return EXIT_SUCCESS;
}

/strong

/strongp style=

/strong(pom!=0)