#include <cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int dight(int x){
return (int)floor(log10(x))+1; //向下取整数 求位数
}
int check(int x,int*num){ //检查个个位数是否相同
while (x)
{
if(num[x%10]==1){
return 0;
}
num[x%10]=1;
x/=10;
}
return 1;
}
int func(int a,int b,int c){ //求这10个数字是否都不重复
int num[10]={1}; //直接设置第0位1 直接代表0不参与
if(check(a,num)==0) return 0;
if(check(b,num)==0) return 0;
if(check(c,num)==0) return 0;
return 1;
}
int main(){
int ans=0,mark[10005]={0};
for(int i=1;i<100;i++){
for(int j=i+1;1;j++){
int a=dight(i),b=dight(j),c=dight(i*j);
if(a+b+c==9){
if(func(i,j,i*j)){
if(mark[i*j]==0){ //使求出的I*J不重复
mark[i*j]=1;
ans+= i*j;
}
cout<<"i"<<" * "<<"j"<<" = "<<i*j<<endl;
}
}else if(a+b+c>9){ //大于9个的数字也没意义往下查了
break;
}
}
}
cout<<ans<<endl;
return 0;
}
运行结果