问题描述
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
java代码如下
import java.util.*;
public class Main {
static int count = 0;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
for (int i = 1; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i == j) {
continue;
}
for (int k = 0; k < 10; k++) {
if (k == i || k == j) {
continue;
}
for (int l = 0; l < 10; l++) {
if (l == i || l == j || l == k) {
continue;
}
int z = i * 1000 + j * 100 + k * 10 + l;
if (j != 0) {
int product1 = i * (j * 100 + k * 10 + l);
check(z, product1);
}
if (k != 0) {
if (i * 10 + j < k * 10 + j) { //防止重复
int product2 = (i * 10 + j) * (k * 10 + l);
check(z, product2);
}
}
}
}
}
}
System.out.println(count);
scan.close();
}
/**
* 检查原来四位数与乘积包含的数组是否相同
*
* @param z 原来的四位数
* @param x 乘积
*/
static void check(int z, int x) {
String sz = String.valueOf(z);
String sx = String.valueOf(x);
char charsZ[] = sz.toCharArray();
char charsX[] = sx.toCharArray();
Arrays.sort(charsZ);
Arrays.sort(charsX);
sz = new String(charsZ);
sx = new String(charsX);
if (sz.equals(sx)) {
count++;
}
return;
}
}