Informatică, întrebare adresată de alextheavocado, 9 ani în urmă

Cerința (problema 3078 pbinfo)

Scrieți un program care citește un număr natural n și o cifră k. Programul va calcula produsul P al cifrelor lui n diferite de cifra k.
Date de intrare

Programul citește de la tastatură numărul n.
Date de ieșire

Programul va afișa pe ecran numărul P, cu semnificația din enunț. Dacă n nu conține cifre diferite de k, programul va afișa valoarea 0.

Ce este gresit in acest cod de imi da 80 de puncte?
#include

using namespace std;

int main()
{
int n,k,cif;
long long p;
cin >> n >> k;
p=1;
while (n != 0)
{
cif = n%10;
if (cif != k)
{
p = p * cif;
}
n = n/10;
}
if (p != 1)
cout << p;
else
if (p = 1)
cout << "0";
return 0;
}

Răspunsuri la întrebare

Răspuns de andrei750238
1

[+] De ce programul nu functioneaza :

Tu verifici daca produsul este 1 pentru a determina daca exista cifre care au intrat in produs. Acest lucru functioneaza in toate cazurile mai putin atunci cand n este de forma n=111...1 iar k \neq 1.

Exemplu :

  • Pentru n=111 si k=5 se va afisa 0 (pentru ca p=1). Trebuia sa afisam 1

[+] Quickfix

Folosim variabila binara modificat in care retinem daca produsul a fost modificat sau nu.

[+] Propunere rezolvare (100 puncte) :

#include <iostream>  

using namespace std;

int main()

{

int n, k, cif;

bool modificat = 0;

long long p;

cin >> n >> k;

p = 1;

while (n != 0)

{

 cif = n % 10;

 if (cif != k)

 {

  p = p * cif;

  modificat = 1;

 }

 n = n / 10;

}

if (modificat)

 cout << p;

else

 cout << 0;

return 0;

}

Anexe:
Alte întrebări interesante