👤

Dorel a primit de ziua lui un tricou pe care era scris numărul n.

Cerința:
Aflați câți divizori ai lui n au mulțimea cifrelor din scrierea lor inclusă în mulțimea cifrelor din scrierea lui n.

Date de intrare:
Fișierul de intrare odaoni.in conține pe prima linie numărul n.

Date de ieșire:
Fișierul de ieșire odaoni.out va conține pe prima linie numărul divizorilor lui n care au mulțimea cifrelor din scrierea lor inclusă în mulțimea cifrelor din scrierea lui n.

Exemplu:
odaoni.in
12
odaoni.out
3

Explicație:
Numărul 12 are divizori 1,2,3,4,6,12, iar dintre aceștia numai 1,2,12 au mulțimea cifrelor inclusă în mulțimea cifrelor lui 12.

In C++.
Multumesc!


Răspuns :

#include <bits/stdc++.h>

using namespace std;

ifstream f("odaoni.in");

ofstream g("odaoni.out");

int n,i,x,sol,r,v[10],ok;

int main()

{

   f >> n ;

   x = n ;

   while(x!=0)

   {

       r = x % 10 ;

       v[r] = 1 ;

       x = x / 10 ;

   }

   sol = 0 ;

   for( i = 1 ; i * i < n ; i++ ) if( n % i == 0 )

       {

           x = i ;

           ok = 1 ;

           while(x!=0)

           {

               r = x % 10;

               if ( v[r]==0 ) ok = 0 ;

               x = x / 10 ;

           }

           sol += ok ;

           x = n / i ;

           ok = 1 ;

           while(x!=0)

           {

               r = x % 10 ;

               if ( v[r]==0 ) ok

                       = 0 ;

               x = x / 10 ;

           }

           sol += ok ;

       }

   if( i * i == n )

   {

       x = i ;

       ok = 1 ;

       while(x!=0)

       {

           r = x % 10 ;

           if ( v[r]==0 ) ok = 0

                                   ;

           x = x / 10 ;

       }

       sol += ok ;

   }

   g << sol ;

   return 0;

}

#include <bits/stdc++.h>

using namespace std;

ifstream fin("odaoni.in");

ofstream fout("odaoni.out");

 

int n, cf[10], d, aux, nrdiv=1;

int multimecifre(int nr)

{

   while(nr)

   {

       if(cf[nr%10]==0)

           return 0;

       nr/=10;

   }

   return 1;

}

int main()

{

   fin>>n;

   aux=n;

   while(aux)

   {

       cf[aux%10]++;

       aux/=10;

   }

   if(cf[1])

       nrdiv++;

    for(d=2; d*d<n;d++)

       if(n%d==0)

       {

           if(multimecifre(d))

               nrdiv++;

           if(multimecifre(n/d))

               nrdiv++;

       }

   if(d*d==n)

       if(multimecifre(d))

           nrdiv++;

   fout<<nrdiv;

   return 0;

}

Vă mulțumim că ați ales să vizitați site-ul nostru dedicat Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți alte întrebări sau aveți nevoie de asistență suplimentară, nu ezitați să ne contactați. Vă așteptăm cu drag să reveniți și nu uitați să ne salvați în lista de favorite!


Ze Teaching: Alte intrebari