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