C++ do sprawdzenia (liczby armstronga) Pilne:(

0

"n" - cyfrowa liczba naturalna jest liczba Armstronga, jesli jest równa sumie "n" tych potęg swoich liczb. Napisac program znajdujący wszystkie 2, 3 i 4 cyfrowe liczby Armstronga.

Znalazłem taki program, ale nie wiem czy jest dobry... Program jest mi potrzebny na jutro:(

#include<iostream>
#include<cmath>

using namespace std;
#define N 6
#define System 10
#define Czy_skumulowany true // jeśli false to sprawdza tylko liczby N cyfrowe, jeśli true to wszystkie od 0 do N cyfrowych.
int main()
{
int Gorna_granica = (int)pow((double)System,N)-1;
int dolna_granica = 0;
if(!Czy_skumulowany)
dolna_granica = (int)pow((double)System,N-1);
for(int i=dolna_granica;i<Gorna_granica;i++)
{
int liczba_do_spr = i;
int ilosc_cyfr=0;
for(ilosc_cyfr=0;liczba_do_spr>0;ilosc_cyfr++)
{
liczba_do_spr = liczba_do_spr / 10;
}
if (ilosc_cyfr==0)
ilosc_cyfr=1;

int * cyfry = new int[ilosc_cyfr];
int liczba = i;
int ktora_cyfra=ilosc_cyfr;
int liczba_do_przeliczenia=liczba;
while(--ktora_cyfra>=0)
{
cyfry[ktora_cyfra] = liczba_do_przeliczenia%System;
liczba_do_przeliczenia/=System;
}
int liczba_potega=0;
for(int j=0;j<ilosc_cyfr;j++)
{
liczba_potega += (int)pow((double)cyfry[j],ilosc_cyfr);
}

if(liczba_potega == liczba)
cout << liczba << endl;
}

cin.get();
cin.get();
}
0

Całość sprowadza się do mniej więcej:

long suma = 0;
for (unsigned int i = 0; i < s.length(); i++)
{
     suma += pow(tab[i],s.length());
}

if (suma == x) return true;

zakładając że
x - sprawdzana liczba
tab[] - tablica cyfr z liczby0 'x'
s - liczba 'x' w stringu

3
cout <<"153 370 371 407"<<endl;

:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1