题意:给出一个数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\n",s1,s2,n); 36 } 37 if(t) 38 cout<<endl; 39 } 40 return 0; 41 }