Sprawdzanie liczb Armstronga

Odpowiedz Nowy wątek
2019-10-07 20:07
0

Hej, mam za zadanie napisać program w C++, który miałby sprawdzać każdą liczbę od 1 do n, czy jest liczbą armstronga, program prawie napisany, lecz cały czas wychodzi mi z pętli for i zatrzymuje się, czy mam gdzieś błąd, mógłby ktoś sprawdzić? Ponieważ męczę się z tym już z godzinę.

#include <iostream>
using namespace std;

int main()
{
    int n, x, ki;
    setlocale(LC_ALL,"");
    cout<<"Program ma obliczyć i wypisać możliwe liczby Armstronga"<<endl<<"Dane"<<endl<<"===="<<endl;
    cout<<"Liczba do której program ma obliczać: ";
    cin>>n;
    cout<<"Wynik"<<endl<<"====="<<endl<<"Liczby Armstronga mniesze od "<<n<<" to: "<<endl;
    for (int i=1;i<=n;++i)
    {
        int z=0;
        ki=i;
        while (x>0)
        {
            x=ki%10;
            z=z+x*x*x;
            ki/=10;
            x=ki;
        }
        if (z==i)
            cout<<z<<endl;
    }
    return 0;
}
edytowany 1x, ostatnio: May2Bee, 2019-10-07 20:26
2019-10-07 20:12
0

Zwyczajnie zadeklaruj zmienną z, wewnątrz pętli for:

May2Bee napisał(a):
    for (int i=1;i<=n;i++)
    {

I daruj sobie:

May2Bee napisał(a):
        else
            z=0;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2019-10-07 20:23
0
_13th_Dragon napisał(a):

Zwyczajnie zadeklaruj zmienną z, wewnątrz pętli for:

May2Bee napisał(a):
    for (int i=1;i<=n;i++)
    {

I daruj sobie:

May2Bee napisał(a):
        else
            z=0;

Zrobiłem tak i przeczytałem tamten temat, ale chyba przegapiłem rozwiązanie na mój problem, ponieważ wciąż wykonuje pętlę for tylko raz.

Pozostało 580 znaków

2019-10-07 20:24
0

To wklej jeszcze kod po zmianach


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2019-10-07 20:26
0
_13th_Dragon napisał(a):

To wklej jeszcze kod po zmianach

Edytowałem główny post

Pozostało 580 znaków

2019-10-07 21:31

Sprawdzasz (x > 0) w warunku while, podczas gdy x, jest niezainizjalizowane, ma być x = ki, przed pętlą:

int z=0;
        ki=i;
        x = ki;
        while (x>0)
        {

            x=ki%10;
            z += x*x*x;
            ki/=10;
            x=ki;
        }

edytowany 1x, ostatnio: lion137, 2019-10-07 21:31

Pozostało 580 znaków

2019-10-07 21:34
0
lion137 napisał(a):

Sprawdzasz (x > 0) w warunku while, podczas gdy x, jest niezainizjalizowane, ma być x = ki, przed pętlą:

int z=0;
        ki=i;
        x = ki;
        while (x>0)
        {

            x=ki%10;
            z += x*x*x;
            ki/=10;
            x=ki;
        }

Dzięki! W tym był problem

Pozostało 580 znaków

2019-10-08 13:27
0
    int pw[]={0,1,8,27,64,125,216,343,512,729};
    for(int i=1;i<=n;++i)
    {
        int sum=i;
        for(int val=i,next=0;val;val=next) sum-=pw[val-10*(next=val/10)];
        if(!sum) cout<<i<<endl;
    }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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