【思路】
将表达式d = a + b /c 变除法为乘法 : (d - a)c = b
对于每一个全排列方案分割成 a、b、c三部分,校验上述表达式是否成立。
其中分割过程就是确定位数的过程:易知a的位数大于等于d(假设位数为len), b/c > 1 —> b > c b的位数大于等于c。
import java.io.*;
class Main{
static int d, ans, len;
static int N = 20;
static boolean vis[] = new boolean[N];
static int f [] = new int [N];
//100=3+69258/714
//d = a + b /c ---> (d - a)c = b
//a的位数大于等于d(假设位数为len)
// b/c > 1 ---> b > c b的位数大于等于c
//枚举位数:[i:len] 9-i-j [j: (9 -i)/2](j >= 1)
public static int get(int l, int r){
int res = 0;
for(int i = l; i < r; i ++) res = res * 10 +f[i];
return res;
}
public static void dfs(int m){
if( m == 9){//对于每一个全排列分割成 a、b、c三部分
for(int i = 1; i <=len; i ++)//枚举a的位数
for(int j = 1; j <= (9 - i)/2; j++){//枚举c的位数
int a = get(0 , i);//[0, i)
int c = get(i, i + j);//[i, i +j)
int b = get(i + j, 9);
if( (d - a) *c == b){
//System.out.println(a + " "+ b +" "+ c);
ans++;
}
}
return;
}
for(int i = 1; i <= 9; i++)
if(!vis[i]){
vis[i] = true;
f[m] = i;
dfs(m + 1);
vis[i] = false;
}
}
public static void main(String args[]) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
len = s.length();
d = Integer.parseInt(s);
dfs(0);
System.out.println(ans);
}
}