uva 471

题意:给出一个数n,问有多少组数满足是s1/ s2 =n,要求组成s1和s2的数字没有重复的。

分析:枚举,然后二进制判断各位数字是否相同。

 1 #include<iostream>
 2 #include<cstdio>
 3 #define INF 9876543210
 4 using namespace std;
 5 
 6 bool judge(long long n)
 7 {
 8     int cnt=0;
 9     int m;
10     while(n)
11     {
12         m=1<<(n%10);//对每位数字进行扩展为2^n
13         if(cnt&m)//查找是否其它位上有贡献的1
14             return false;
15         cnt|=m;//把所有的数加起来
16         n/=10;
17     }
18     return true;
19 }
20 
21 int main()
22 {
23     int t;
24     long long n,s1,s2;
25     scanf("%d",&t);
26     while(t--)
27     {
28         scanf("%lld",&n);
29         for(s2=1;s2<=INF;++s2)
30         {
31             s1=n*s2;
32             if(s1>INF)
33                 break;
34                 if(judge(s1)&&judge(s2))
35                     printf("%lld / %lld = %lld
",s1,s2,n);
36         }
37         if(t)
38             cout<<endl;
39     }
40     return 0;
41 }
原文地址:https://www.cnblogs.com/sunshinemxh/p/4850978.html