👤

Un program de 100 pcte pe pbinfo va rog! (#1353)

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 2 ori), 12, 13, 14, 15.


Răspuns :

#include <fstream>
using namespace std;
ifstream f("aparitiicifra.in");
ofstream g("aparitiicifra.out");
int k,c,p,sol,n;
int main()
{   f>>k>>c;
    p=1;
    n=k;
    while(k)
    {
        if(k%10>c) sol=sol+(k/10+1)*p;
        if(k%10<c) sol=sol+(k/10)*p;
        if(k%10==c) sol=sol+(k/10)*p+n%p+1;
        k/=10;
        p*=10;
    }
    g<<sol;
    return 0;
}