问题描述

由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;
	}
}