Ciąg liczb n-elementowych suma i iloczyn

0

Treść zadania w kodzie,prosiłbym o pomoc.Moge być ewentualnie duże wskazówki ;p

 


#include <iostream>
#include <cstdlib>
#include <cstring>    //Napisz program ,ktory dla ciągu n-elementowego liczb calkowitych wypisze,te ktorych suma 
//cyfr =iloczynowi cyfr.
using namespace std;
int suma_liczb(int liczba,int n)
{
int s=0;
int i=0;
int iloczyn=0;
do
{
cin>>liczba;
i++;

}
while(i!=n);

}	
int main()
{
 int n = 0;
 cin>>n;
    int  liczba;
  int s=suma_liczb(liczba,n);
	
	
	
system("PAUSE");	
}






0

Jakie jest pytanie?

0

Napisz program ,ktory dla ciągu n-elementowego liczb calkowitych wypisze,te ktorych suma
cyfr =iloczynowi cyfr.

0

Po odrobienia zadań zapraszamy do działu Praca.
Jeżeli prosisz o pomoc, zadaj konkretne pytanie.

0

Nie potrafie zrobić tego wyswietlenia liczb ktorych suma rowna sie iloczynowi .

0

To nie jest pytanie do nas, to jest Twoje zadanie. Poza tym sformułowanie jest bardzo nieprecyzyjne, skąd ma się wziąć w programie ten n-elementowy ciąg liczb?

0
   unsigned liczba=1357986420;
   cout<<"liczba "<<liczba<<" sklada sie z cyfr:";
   do { cout<<' '<<liczba%10; liczba/=10; } while(liczba);
0

Powinno działać dla wszystkich możliwych przypadków. Wiem ,że to jest niewydajny sposób i ,że idzie to pewnie jakoś ze wzorów zrobić ale działa:

#include <iostream>
#include <sstream>
#include <string>
 
bool czySumaCyfrRownaIloczynowi(int num) {
    std::stringstream ss;
    std::stringstream cyfra;
    std::string numS;
    int suma = 0;
    int iloczyn = 1;
    
    ss << num;
    numS = ss.str();
    for(std::string::iterator its = numS.begin(); its != numS.end(); its++) {
        cyfra << *its;
        int n;
        cyfra >> n;
        suma += n;
        iloczyn *= n;
    }
    if(iloczyn == suma) return true;
    return false;
    
}
int main() {
    int tab[] = {567,91,65,22,78,18};
    
    for(int i = 0; i < 6; i++) {
        if(czySumaCyfrRownaIloczynowi(tab[i]))
        std::cout << tab[i] << "\n";
    }
}
 
0

@robcio: nieco przekombinowane imho; http://ideone.com/IG2b3I

0

@robcio, czasami proste rozwiązania są zwyczajnie prostsze:

bool czySumaCyfrRownaIloczynowi(unsigned num)
  {
   unsigned suma=0,iloczyn=1;
   do { unsigned v=num%10; suma+=v; iloczyn*=v; } while(num/=10);
   return (suma==iloczyn);
  }
0

zadanie sformulowal na zajeciach wykladowca i nie sprecyzowal do końca. Wolałbym by to zadanie było zrobione bez typu tablicowego z pętlą do while i aby to uzytkownik wpisywał liczby do tego ciągu. Szukałem teraz czegoś podobnego w internecie ,ale nic nie moge na ten temat znaleŹć. Rozwiązanie tego problemu jak zaprezentowal tutaj ktoś jest moim zdaniem przekombinowane .Potrzebne mi naprowadzanie jak to zrobić bez typu tablicowego i ewentualne wskazowki.

0
adamwrzesnia napisał(a):

Szukałem teraz czegoś podobnego w internecie ,ale nic nie moge na ten temat znaleŹć.

Skoro nie możesz znaleźć nic podobnego, to napisz to sam? :|
Przecież już rozwiązanie i tak masz praktycznie podane w tym temacie.

0

Po co mi gotowiec jak potem dostane podobne zadanie na egzaminie np i nic nie bede wiedzial?

1

Sugerowałem, abyś posiłkując się naszymi przykładami napisał własny program...
Zadanie jest w gruncie rzeczy przecież banalne; musisz sprawdzić, czy suma cyfr w liczbie jest równa ich iloczynowi.
Liczbę można rozłożyć na pojedyncze cyfry, zauważając taką zależność, z której skorzystałem ja oraz @antimonium (@robcio zamieniał liczbę na ciąg znaków, ale też nieco podobna sytuacja):

1024=(1*10^3) + (0*10^2) + (2*10^1) + (4*10^0)
123=(1*10^2) + (2*10^1) + (3*10^0)
(...)

(przy czym pamiętać, że n^0=1)

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