Ionel a primit temă de la profesorul său: să scrie pe hârtie numerele de la 1 la n. Cum numărul n era destul de mare el s-a cam plictisit şi a început să se joace numărând de câte ori a apărut o anumită cifră în numerele ce trebuiau scrise. Cum număratul era o activitate destul de lentă, el a găsit o metodă simplă de a calcula de câte ori a apărut o cifră în toate numerele tipărite.
Cerinţă
Scrieţi un program care, citind numărul n şi o cifră nenulă c , afişează numărul de apariţii ale cifrei c în reprezentarea tuturor numerelor de la 1 la n.
Date de intrare
Din fişierul de intrare cifre2.in se citesc de pe prima linie numerele naturale n şi c , separate prin spaţiu.
Date de ieşire
Fişierul de ieşire cifre2.out va conţine o singură linie pe care va fi scris numărul de apariţii ale cifrei c în reprezentarea tuturor numerelor de la 1 la n.
Restricţii
0
0
Exemplu : 15 1
Va afisa : 8
În şirul 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15, cifra 1 apare de 8 ori.
Are cineva o idee de a face problema fara a numara toate cifrele?
Răspunsuri la întrebare
Răspuns de
3
#include <fstream>
using namespace std;
int n,i,s,p,c;
int main()
{
ifstream f("cifre2.in");
ofstream g("cifre2.out");
f>>n>>c;
p=1;
i=0;
s=0;
do
{
if (c<(n % 10)) s=s+((n / 10)+1)*p;
if (c>(n % 10)) s=s+(n / 10)*p;
if (c==(n % 10)) s=s+((n / 10)*p)+i+1;
i=i+(n % 10)*p;
n=n / 10;
p=p*10;
} while (n>0);
g<<s;
f.close();
g.close();
return 0;
}
using namespace std;
int n,i,s,p,c;
int main()
{
ifstream f("cifre2.in");
ofstream g("cifre2.out");
f>>n>>c;
p=1;
i=0;
s=0;
do
{
if (c<(n % 10)) s=s+((n / 10)+1)*p;
if (c>(n % 10)) s=s+(n / 10)*p;
if (c==(n % 10)) s=s+((n / 10)*p)+i+1;
i=i+(n % 10)*p;
n=n / 10;
p=p*10;
} while (n>0);
g<<s;
f.close();
g.close();
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă