CodeForces 221B

来源:互联网 发布:点播软件 编辑:程序博客网 时间:2024/05/29 06:48

http://codeforces.com/problemset/problem/221/B

B. Little Elephant and Numbers
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

这给题目在判断除数和被除数是否相等是用到了字符串化为整形数和整形数化为字符串的函数,注意在头文件cstdlib中,详见代码注释.

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


0 0