import java.util.Arrays;
public class TestOne {
/*
* 全排列,确定乘号的位置,
* */
static int[] a = {1,2,3,4,5,6,7,8,9};
static int ans=0;
public static void main(String[] args) {
f(0);
System.out.println(ans/2);
}
private static void f(int n) {
if(n==9) {
for(int i=1;i<=8;i++) {//乘号的位置(前面可能有1~8位数字)
if(check(i)) {
ans++;
}
}
}
for(int i=n;i<9;i++) {
int t=a[i];
a[i]=a[n];
a[n]=t;
f(n+1);
t=a[i];
a[i]=a[n];
a[n]=t;
}
}
//当前n中存在
private static boolean check(int num) {
int num1=0;
int t=1;
for(int i=num-1;i>=0;i--) {//1 2 3 4 5
num1+=a[i]*t;
t*=10;
}
int num2=0;
t=1;
for(int i=8;i>=num;i--) {
num2+=a[i]*t;
t*=10;
}
int res = num1*num2;
//判断res中的数字是否有重复。将res转化为字符串,对其排序,一次与1~9比较
String res2str = res+"";
char[] res2ch = res2str.toCharArray();
if(res2ch.length!=9) return false;//长度小于9
Arrays.sort(res2ch);
for(int i=1;i<=9;i++) {
if(res2ch[i-1]-'0'!=i)
return false;
}//for
System.out.println(res);
return true;
}
}
答案:1625