poniedziałek, 10 kwietnia 2017

Liczby narcystyczne

Liczba narcystyczna, inaczej liczba Armstronga – jest to n-cyfrowa liczba naturalna, która jest sumą swoich cyfr podniesionych do potęgi n.

Lista kroków
Dane wejściowe:  liczba: int
Dane pomocnicze:  int n, i, pom, pom2, cyferki, suma : int
                                liczba: string
Dane wyjściowe:  suma: int, odpowiedź czy liczba jest narcystyczna

K01:   Wczytaj liczba
K02: Suma=0
K03: Cyferki=1
K04: Cyferki=strtoint(liczba)
K05: Wczytaj liczba
K06: n= liczba.size()
K07: i=0
K08: Dla i<=n-1 wykonuj od K09 do K12
K09: pom=strtoints(i,liczba)
K10: pom2=pow(pom,n)
K11: suma=suma+pom2
K12: i++
K13: Jeżeli suma==cyferki to Napisz "liczba jest narcystyczna", w przeciwnym wypadku Napisz "liczba nie jest narcystyczna"


Schemat blokowy

Rozwiązanie w C++

#include<iostream> 
#include<string>
#include<cmath>
#include<sstream>
using namespace std; 
int strtoint(string liczba) //tlumaczy string do int dla liczby
{
int rezultat;
istringstream convert(liczba);
convert>>rezultat;
return rezultat;
}
int strtoints(int i, string liczba) //tlumaczy string do int dla pojedynczych cyfr liczby
{
int rezultat;
string pom;
pom=liczba[i];
istringstream convert(pom);
convert>>rezultat;
return rezultat;
}
int main ()
int n; //dane
int i; 
int pom;
int pom2;
int cyferki;
int suma=0;
string liczba;
cout<<"Podaj liczbe:"<<endl; 
cin>>liczba; //Wczytanie zmiennej liczby
cyferki=1;
cyferki=strtoint(liczba);
n=liczba.size();
cout<<"n = "<<n<<endl;
for (i=0;i<=n-1; i++) //petla, ktora wyswietla pojedyncze cyfry liczby
{
pom=strtoints(i, liczba);
cout<<i+1<<" cyfra liczby: "<<pom<<endl;
pom2=pow(pom,n);
suma=suma+pom2; //suma jest zwiekszana o potęgę poszczególnej cyfry
}
cout<<"suma = "<<suma<<endl;
if (suma==cyferki)
{
cout<<"Liczba jest narcystyczna"<<endl;
}
else cout<<"Liczba nie jest narcystyczna"<<endl;
return 0; 
}


Rozwiązanie w EXCEL




Liczba wprowadzona na początku została podzielona na pojedyncze cyfry. Jest to widoczne w szóstym wierszu. Następnie skopiowano to do kolejnych komórek.
=JEŻELI(DŁ(C4)>10;WARTOŚĆ(FRAGMENT.TEKSTU(C4;DŁ(C4)-10;1));0)
Następnie cyfry te zostały podniesione do potęgi n, czyli ilości cyfr początkowej liczby.
Została wykorzystana poniższa formuła:
=DŁ(C4)
Na koniec program sumuje powyższe potęgi i sprawdza, czy ich suma jest równa liczbie wyjściowej.
=SUMA(D7:N7)
Jeżeli jest równa to początkowa liczba jest narcystyczna.
=JEŻELI(D8=C4;”Liczba jest narcystyczna”;”Liczba nie jest narcystyczna”)