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
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 iar .
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
Limba română,
8 ani în urmă
Ed. muzicală,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă