优美乘积:等式两边没有重复数,且包括从0至9的所有数,如46*715=32890
#include<iostream>
using namespace std;
int f(int y,int a[]){
int x;
while(y>0){
x=y%10;
if(a[x]!=0) return 1;//若存在0至9中的某数,则算法不必继续
a[x]=a[x]+1;
y/=10;
}
return 0;
}
int main(){
int i,num[10],a,b,c;
int count=0,flag=0;
for(a=2;a<=98;a++){//a*b=c
for(b=102;b<9876;b++){
c=a*b;
for(i=0;i<10;i++) num[i]=0; //0-9出现次数初始化
if(f(a,num)||f(b,num)||f(c,num)) continue; //分离数字,num数组用于统计0-9出现的次数,如大于1,跳出本次循环
flag=1;
for(i=0;i<=9;i++){//检验数字0-9各出现且仅出现一次
if(num[i]!=1) flag=0;
}
if(flag==1){
cout<<a<<"*"<<b<<"="<<c<<endl;
count++;
}
}
}
cout<<count;
return 0;
}