# PBinfo #1353 – AparitiiCifra – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Determinaţi numărul de apariţii a unei cifre c în reprezentarea tuturor numerelor mai mici sau egale cu un n dat.

Date de intrare
Pe prima linie a fişierului aparitiicifra.in se află numerele n şi c separate prin spaţii.

Date de ieșire
Pe prima linie a fişierului aparitiicifra.out se scrie numărul de apariţii a cifrei c în reprezentarea tuturor numerelor mai mici sau egale cu n.

Restricții și precizări

0 < n < 2.000.000.000
0 < c < 10

Exemplu:
aparitiicifra.in

15 1
aparitiicifra.out

8
Explicație
Cifra 1 a apărut în numerele 1, 10, 11 (de două ori), 12, 13, 14, 15.

## Cod sursă C++

```cpp
program numere;
var c,n:longint;
    f:text;
function performant(c,k:longint):longint;
var i,j,n,z:longint;
begin
n:=0;{nr de aparitii a cifrei c}
j:=1;{pornim de la ultima cifra(j=10-penultima cifra,j=100-antepenultima...)}
z:=0;{in z memoram ultimele cifre ale numarului k, care au fost extrase}
while k>=c do
 begin
 if k mod 10>c then n:=n+(k div 10+1)*j
  else if k mod 10=c then n:=n+(k div 10)*j+z+1
         else n:=n+(k div 10)*j;
 z:=z+(k mod 10)*j;
 k:=k div 10;
 j:=j*10;
 end;
performant:=n;
end;
Begin
assign(f,'aparitiicifra.in');reset(f);
readln(f,n,c);
close(f);
assign(f,'aparitiicifra.out');rewrite(f);
writeln(f,performant(c,n));
close(f);
End.
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1353)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1353/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1353/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
