C++ // 1 klasa

Napisz program, która dla danej liczby naturalnej n oblicza ile razy cyfra 1 występuje w liczbach naturalnych nie większych od n.

Wejście

Jedna liczba naturalna 0<n<106

Wyjście

Ilość wystąpień cyfry 1 w liczbach nie większych od n.

Przykład

wejście

11

wyjście

4
DAJE NAJ​



Odpowiedź :

REGNAD

Odpowiedź:

#include<iostream>

int countOnesInNumber(int n){

   int counter = 0;

   while (n > 0) {

       if (n % 10 == 1) {

           counter++;

       }

       n /= 10;

   }

   return counter;

}

int main() {

   int n;

   std::cout << "Podaj liczbe\n";

   std::cin >> n;

   int counter = 0;

   for (int i = 0; i <= n; i++) {

       counter += countOnesInNumber(i);

   }

   std::cout << counter;

   return 0;

}

Wyjaśnienie:

Odpowiedź:

#include <iostream>

using namespace std;

int main() {

 int i,a,n=0;

 cout<<"Podaj liczbę: ";

 cin>>a;

 for (i=1;i<=a;i++){

 if (i/10==1){

   n=n+1;}

 if (i/100==1){

   n=n+1;}

 if (i%10==1){

   n=n+1;}}

cout<<"\nLiczba występowania cyfry 1 wynosi:"<<n;

}

Wyjaśnienie:

Sprawdzamy w kolejności:

i/10==1 - czy jest to liczba 10-19 (przy dzieleniu całkowitym przez 10 da nam wynik 1)

i/110 - czy jest to liczba 100-106 (przy dzieleniu całkowitym przez 100 da nam wynik)

i%10==1 - czy jest to liczba {1, 11, 21, 31, ..., 91, 101} (przy dzieleniu przez 100 daje resztą z dzielenia równą 1).

WERSJA Z ZAŁOŻENIEM, że podana liczba jest z zakresu (0, 106):

#include <iostream>

using namespace std;

int main() {

 int i,a,n=0;

 cout<<"Podaj liczbę: ";

 cin>>a;

 if (a>0 && a<106){

 for (i=1;i<=a;i++){

 if (i/10==1){

   n=n+1;}

 if (i/100==1){

   n=n+1;}

 if (i%10==1){

   n=n+1;}}

cout<<"\nLiczba występowania cyfry 1 wynosi:"<<n;

 }

 else

   cout<<"\nBłędnie podana liczba.";}

Zobacz obrazek Animaldk