UVa 471 Magic Numbers (枚举)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=412


直接枚举。代码中给出了一个用位运算判断数字中是否有重复数字的方法。


完整代码:

/*0.032s*/

#include <cstdio>
const long long maxn = 9876543210LL;

inline bool check(long long n)
{
	int i, cnt = 0;
	while (n)
	{
		i = 1 << (n % 10);
		if (cnt & i) return false;
		cnt |= i;
		n /= 10;
	}
	return true;
}

int main()
{
	long long s1, s2, n;
	int t;
	scanf("%d", &t);
	while (t--)
	{
		scanf("%lld", &n);
		for (s2 = 1; s2 <= maxn; ++s2)
		{
			s1 = n * s2;
			if (s1 > maxn) break;
			if (check(s2) && check(s1)) printf("%lld / %lld = %lld\n", s1, s2, n);
		}
		if (t) putchar(10);
	}
	return 0;
}

你可能感兴趣的:(位运算,C++,ACM,uva)