http://codeforces.com/problemset/problem/221/B
#include <string.h>
#include <math.h>
#include <stdio.h>
#include<cstdlib>//字符串整形数互化的函数头文件
using namespace std;
char a[15];
bool flag[15];
int main()
{
while(~scanf("%s",a))
{
int len=strlen(a);
int xx=atoi(a);//字符串化为整形数
if(xx==1)
printf("1\n");
else
{
for(int j=0; j<len; j++)//原字符串中说含有的字符做标记
{
flag[a[j]-'0']=true;
}
int count=0,s=(int)sqrt(xx);//取平方根
for(int i=1; i<=s; i++)
if(xx%i==0)
{
memset(a,0,sizeof(a));
sprintf(a,"%d",i);//整形数化为字符串
len=strlen(a);
for(int j=0; j<len; j++)
if(flag[a[j]-'0'])
{
count++;
break;
}
if(i*i!=xx)//必定有一个和i相乘为xx的数
{
memset(a,0,sizeof(a));
sprintf(a,"%d",xx/i);
len=strlen(a);
for(int j=0; j<len; j++)
if(flag[a[j]-'0'])
{
count++;
break;
}
}
}
printf("%d\n",count);
}
memset(a,0,sizeof(a));
memset(flag,0,sizeof(flag));
}
return 0;
}