#include<iostream>usingnamespace std;constint N =10;int target;// 题目给出的目标数int num[N];// 保存全排列的结果bool used[N];// 生成全排列过程中标记是否使用过int cnt;// 计数,最后输出的结果// 计算num数组中一段的数是多少intcalc(int l,int r){
int res =0;for(int i = l; i <= r; i++){
res = res *10+ num[i];}return res;}// 生成全排列// 当全排列生成后进行分段voiddfs(int u){
// 用两层循环分成三段if(u ==9){
for(int i =0; i <7; i++){
for(int j = i +1; j <8; j++){
int a =calc(0, i);int b =calc(i +1, j);int c =calc(j +1,8);// 注意判断条件,因为C++中除法是整除,所以要转化为加减乘来计算if(a * c + b == c * target){
cnt++;}}}return;}// 搜索模板for(int i =1; i <=9; i++){
if(!used[i]){
used[i]=true;// 标记使用
num[u]= i;dfs(u +1);
used[i]=false;// 还原现场}}}intmain(){
scanf("%d",&target);dfs(0);printf("%d\n", cnt);return0;}