杰哥特别喜欢和数字打交道,现在他有一个正整数 X,他想知道有多少个满足
要求的正整数 D 存在,要求是 D 是 X 的因子,并且 D 和 X 至少有一位相同。
#include <iostream>
#include <cstring>
using namespace std;
int find(int p,int t);//查找两个数字的数位上是否存在相同的数字
int a[10];
int b[10];
int main()
{
int sum=0,t=0,x,x1,i,i1,k=0,n=0;
cin >> x;
x1=x;
while(x1)//将数字x的各个数字赋值到a数组
{
a[t]=x1%10;
x1/=10;
t++;
}
for(i=1;i*i<=x;i++)
{
if(x%i==0)
{
if(i*i==x)//如果i为x的平方根,则只查找一次
{
if( find(i,t) )
sum++;
}
else//如果i不是x的平方根,则查找i与x/i
{
if( find(i,t) )
sum++;
if( find(x/i,t) )
sum++;
}
}
}
cout << sum;
return 0;
}
int find(int p,int t)//p为x的因子,t为x的数位个数
{
int k=0,n=0;
memset(b,0,sizeof(b));//清空数组b
while(p)//将p的各个数位赋值给数组b
{
b[k]=p%10;
p/=10;
k++;
}
for(int j=0;j<t;j++)//遍历数组a,b,查找是否有相同数字
{
for(int m=0;m<k;m++)
{
if(a[j]==b[m])
{
n=1;
break;//n作为一个标志
}
}
if(n==1)
break;//如果有相同的数字,跳出两个循环
}
if(n==1)
return 1;
else
return 0;
}