time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
The Little Elephant loves numbers.
He has a positive integer x. The Little Elephant wants to find the number of positive integers d, such that d is the divisor of x, and x andd have at least one common (the same) digit in their decimal representations.
Help the Little Elephant to find the described number.
Input
A single line contains a single integer x (1 ≤ x ≤ 109).
Output
In a single line print an integer — the answer to the problem.
Sample test(s)
input
1
output
1
input
10
output
2
解题说明:此题是统计能被x整除并且和x至少存在一位数相同的数字个数。可以先把x中所包含的数字找出来,用一个大小为10的数组标记即可,然后从1到根号x开始遍历,针对每一个数字判断能否被x整除,如果整除就判断是否存在数字相同的位,可以写一个子函数判断数字是否相同。注意由于遍历区间是1到根号x,故需要判断大于根号x到x之间的情况,此时只需要判断x/i的情况即可,否则会少计算一部分数字。
#include<iostream>
#include<map>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int arr[10];
int ans = 0;
void check_common(int i)
{
while(i>0)
{
if(arr[i%10]==1)
{
ans++;
break;
}
i = i/10;
}
}
int main()
{
int x,n,b=0,i;
for(i=0;i<10;i++)
{
arr[i] = 0;
}
cin >> x;
n = x;
while(n>=1)
{
arr[n%10] = 1;
n = n/10;
}
if(x==1)
{
ans = 1;
}
else
{
for(i=1;i*i<=x;i++)
{
if(x%i==0)
{
check_common(i);
if(x/i!=i)
{
check_common(x/i);
}
}
}
}
cout << ans<<endl;
return 0;
}