Informatică, întrebare adresată de andreeamrn22, 8 ani în urmă

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ăspunsuri la întrebare

Răspuns de Palmabil
3

#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;

}

Răspuns de mocanualexandrp2ikb6
3

#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;

}

Alte întrebări interesante