Sprawdzanie liczb Armstronga

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;
}

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;
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.

0

To wklej jeszcze kod po zmianach

0
_13th_Dragon napisał(a):

To wklej jeszcze kod po zmianach

Edytowałem główny post

1

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;
        }
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

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;
	}

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