#include #define MAX_N 1005 using namespace std; bool judge1(int n) //判断两个数的乘积是否为4位数 { int ans = 0; while (n) { ans++; n /= 10; } if (ans == 4) return true; return false; } bool judge2(int i, int j) //判断乘积的数是否为原来的四个数 { int s1 = 0, s2 = 0; //和 int ss1 = 1, ss2 = 1; //积 int tmp = i * j; bool flag1 = true, flag2 = true; while (tmp) { s1 += tmp % 10; if (tmp % 10 == 0) flag1 = false; else ss1 *= tmp % 10; tmp /= 10; } while (j) { s2 += j % 10; if (j % 10 != 0) ss2 *= j % 10; else flag2 = false; j /= 10; } while (i) { s2 += i % 10; if (i % 10 != 0) ss2 *= i % 10; else flag2 = false; i /= 10; } if (s1 == s2 && ss1 == ss2 && flag1 && flag2) //如果没有0的话,是否乘积和和都相等 return true; else if ((!flag1 && !flag2) && s1 == s2 && ss1 == ss2) //如果有0的话,是否乘积都相等 return true; return false; } bool judge3(int i, int j) //判断两个数中是否全是不同的数 { int a[4]; int ans = 0; while (i) { a[ans] = i % 10; i /= 10; ans++; } while (j) { a[ans] = j % 10; j /= 10; ans++; } for (i = 0; i < 3; i++) { for (j = i + 1; j < 4; j++) if (a[i] == a[j]) //如果有相等的话返回false return false; } return true; } int main() { //freopen("data.txt","r",stdin); int i, j; int ans = 0; for (i = 1; i < 10; i++) { //一位数乘以三位数 for (j = 123; j < 1000; j++) { if (judge1(i * j) && judge2(i, j) && judge3(i, j)) ans++; } } for (i = 10; i < 100; i++) { //两位数乘以两位数 for (j = i + 1; j < 100; j++) { if (judge1(i * j) && judge2(i, j) && judge3(i, j)) ans++; } } cout << ans; return 0; }