题目描述
有一个正整数X,想知道有多少个满足要求的正整数D存在,要求是D是X的因子,并且D和X至少有一位相同。
输入格式
只有一行,一个正整数X。
对于30%的数据,X<=100。
对于50%的数据,X<=200。
对于100%的数据,X<=1000000000。
输出格式
只有一行,一个整数表示满足要求的数字D的个数。
样例输入
10
样例输出
2
方法一:
顺着题目思路,分两步,第一步先求所有因子,第二步和X进行比较。
方法二:
前一步求所有因子是没法省略的,所有在第二步比较的时候优化了算法,思想是把所有出现的数字用数组存起来,如果比对再次出现那个数字,则满足条件跳出了循环。
#include
#include
using namespace std;
int compare(int i);
int a[9] = { 0 };
int main()
{
int n = 0;//输入的数字
cin >> n;
int x = 0, i = n;//标志位
int count = 0;//总数计数
while (i != 0)
{
x = i % 10;
i = i / 10;
a[x] = 1;
}
for (i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
if (i * i == n)
{
if (compare(i)) count++;
}
else
{
if (compare(i)) count++;
if (compare(n / i)) count++;
}
}
}
cout << count;
}
int compare(int i)
{
int x;
while (i != 0)
{
x = i % 10;
if (a[x] == 1) return 1;
else i = i / 10;
}
return 0;
}