liczba B-narcystyczna
liczba B-narcystyczna: Napisz program, który sprawdza czy liczba x jest B−narcystyczna (preferuję C++/pseudokod).
Liczba x jest B−narcystyczna, jeśli jej zapis w systemie o podstawie B ma n cyfr, których suma
n−tych potęg jest równa x.
Np. liczba 289 jest 5−narcystyczna, bo 289=(2124)5=2*53+1*52+2*5+4 oraz 289=w4+14+24+44.
17 lip 20:05
Blee:
Czyli ze co ... czekasz aż MY Ci podamy kod w C++ (bo jego preferujesz)
No chyba kogoś pogrzało lekko
17 lip 20:23
Blee:
Wybacz, ale nie mam bladego pojęcia jak niby 289 jest 5−narcystyczna.
Trochę inaczej liczby narcystyczne się definiuje.
17 lip 20:27
liczba B-narcystyczna: Tylko, że to nie są liczby narcystyczne, tylko B−narcystyczne. Wymyślone przez autora zadania,
jakby narcystyczne tylko trochę przerobione. W treści podana jest przytoczona definicja.
Ja napisałem program, ale nic nie działa. Dostałem poniższy pseudokod, który teoretycznie jest
poprawny.
Przykładowe prawidłowe rozwiązanie:
m ← n;
d ← 0;
dopóki m>0 wykonuj
m ← m div B;
d ← d+1;
m ← n;
suma ← 0;
dopóki m>0 wykonuj
suma ← suma + potega( m mod B, d );
m ← m div B;
jeżeli suma=n
zwróć TAK i zakończ
w przeciwnym razie
zwróć NIE i zakończ
gdzie potega(x, n) oblicza x do potęgi n np. w następujący sposób:
potega(x,n)
jeżeli n = 0
zwróć 1 i zakończ
w przeciwnym razie
zwróć x*potega(x, n−1) i zakończ
Napisany przeze mnie program:
#include <iostream>
using namespace std;
int potega (int x, int n)
{
if (n==0)
return 1;
else
x*potega(x,n−1);
}
int main()
{
int n;
cin>>n;
int B;
cin>>B;
int m;
int d;
int suma;
m=n;
d=0;
while(m>0)
{
m=m/B;
d=d+1;
}
m=n;
suma=0;
while(m>0)
{
suma=suma+potega(m%B,d);
m=m/B;
}
cout<<suma;
if (suma==n)
cout << "TAK";
else
cout << "NIE";
return 0;
}
17 lip 21:42
Pytający:
"napisałem program, ale nic nie działa"
Niezbyt precyzyjne stwierdzenie.
Twój powyższy kod się oczywiście nie skompiluje. Wystarczy przeczytać komunikat kompilatora i
poprawić przeoczenie zamiast stwierdzać "nic nie działa"...
Bo poza tym działa (dla odpowiednio małych danych):
https://ideone.com/dWJ2DF
17 lip 22:09
liczba B-narcystyczna: Hmm mi się kompiluje. Chodzi mi jedynie o to że podaje niepoprawne komunikaty.
Wiem że np. liczba 3433 jest 6−narcystyczna. Niestety uzyskuję odpowiedź NIE.
17 lip 22:56
liczba B-narcystyczna: Dziękuję za pomoc, po Twojej poprawce działa. Nie za bardzo tylko rozumiem, w którym miejscu
dokonały zostały istotne zmiany. Mogę prosić o wyjaśnienie?
17 lip 23:00
liczba B-narcystyczna: *dokonane
17 lip 23:02
jc: Funkcja w języku Python.
def test(n,p):
m = n
s = 0
while m > 0:
r = m%p
s += r**(p−1)
m /= p
return s == n
print test(289,5)
print test(3433,6)
print test(123,7)
17 lip 23:13
Pytający:
Ok, może się skompilować, zależy od kompilatora. Napisałeś:
int potega (int x, int n) {
if (n==0)
return 1;
else
x*potega(x,n−1);
}
Znaczy się zabrakło "return" i w związku z tym zwracana wartość jest niezdefiniowana dla n≠0.
Jc, sprawdź test(2,3).
18 lip 00:01
liczba B-narcystyczna: Racja. Dziekuje
Pytający
18 lip 07:55