Dlaczego w pętli warunek if działa niepoprawnie?

0

Potrzebuję napisać kod, który przy liczbach składających się z tylko 4 lub 7 (np. 47, 77) lub liczbach które dzielą sie przez jedną z tych liczb (np. 16, 21) wypisze "TAK" a w przeciwnym wypadku "NIE". Mam taki kod:

#include <iostream>
using namespace std;

int k(int x)
{
    while(x)
    { if(x%10!=4 && x%10!=7) return 0;
      x=x/10;
    }
    

}
int n;
int main()
{ cin>>n;

    for(int i=1; i<n; i++)
           {
                  if (k(i)==1 || n%i==0)       cout<<"TAK";
      
                  else       cout<<"NIE";

           }


    return 0;
} 

Dlaczego za każdym razem wypisuje "TAK" jakby omijało else?

0

Twoja funkcja k ma dwa punkty wyjścia (jeden wewnątrz pętli oraz drugi poza), lecz tylko z jednym z tych przypadków zwracasz jakąś wartość (masz returna).

1

Na temat odpowiadaj w postach.

k(i)==1 - tutaj wyraźnie porównujesz czy wywołanie k() zwróci wartość 1... a gdzie w k masz return 1;?

0

To niestety także nie rozwiązuje problemu

0
for(int i=1; i<n; i++)
           {
                  if (k(i)==1 || n%i==0)

No a ile to jest n%1?

0

Wrzuć aktualny kod.

0

n%i==0

wpisujesz 21;
dla kolejnych iteracji masz:

  1. 21%1 = ?
  2. 21%2 = ?
  3. 21%3 = ?
    ...
  4. 21%20 = ?

a to raczej nie wygląda na warunek czy liczba "i" (jednostka urojona?) dzieli się bez reszty przez 4 lub 7. Ale wykorzystałeś dzielenie modulo, połowa sukcesu jest.

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