注意几个特殊条件
然后爆搜 水
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
int judge(int w)
{
int x;
int num[11];
memset(num,0,sizeof(num));
while (w!=0)
{
x=w%10;
if (x==0) return 1;
if (num[x]==1) return 1;
else
num[x]=1;
w/=10;
}
return 0;
}
int judgee(int a,int b,int w)
{
int num[11],x,c;
memset(num,0,sizeof(num));
c=a*b;
x=log10(c)+1;
if (x!=w) return 1;
while (a!=0)
{
if (num[a%10]==1) return 1;
else num[a%10]=1;
a/=10;
}
while (b!=0)
{
if (num[b%10]==1) return 1;
else num[b%10]=1;
b/=10;
}
while (c!=0)
{
if (c%10==0) return 1;
if (num[c%10]==1) return 1;
else num[c%10]=1;
c/=10;
}
return 0;
}
int main()
{
int a,b,aa,bb,j,c,sum,i,ans;
int hash[10010];
memset(hash,0,sizeof(hash));
for (i=10;i<=9999;i++)
if (judge(i)==1) hash[i]=1;
while (scanf("%d%d%d",&a,&b,&c)!=EOF)
{
if (a+b+c==0) break;
if (a+b>c+1)
{
printf("0\n");
continue;
}
if (a>c || b>c)
{
printf("0\n");
continue;
}
if (a==0 || b==0 || c==0)
{
printf("0\n");
continue;
}
if (a+b<c)
{
printf("0\n");
continue;
}
aa=1;
for (i=1;i<a;i++)
aa*=10;
bb=1;
for (i=1;i<b;i++)
bb*=10;
ans=0;
for (i=aa;i<aa*10;i++)
if (hash[i]==0)
for (j=bb;j<bb*10;j++)
if (hash[j]==0)
{
if ( judgee(i,j,c)==1) continue;
// printf("%d %d %d\n",i,j,i*j);
ans++;
}
printf("%d\n",ans);
}
return 0;
}