👤

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ăspuns :

[+] 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 [tex]n=111...1[/tex] iar [tex]k \neq 1[/tex].

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;

}

Vezi imaginea ANDREI750238
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări suplimentare sau nevoie de ajutor, vă rugăm să ne contactați cu încredere. Așteptăm cu drag să reveniți și nu uitați să ne salvați în lista dumneavoastră de favorite!


En Studentsy: Alte intrebari